标签: callkit

Callkit扬声器bug/WhatsApp如何修复它?

我有一个Callkit功能的应用程序.当我按下扬声器按钮时,它将闪烁并设置为关闭状态(有时扬声器设置为LOUD但图标仍然是OFF).当我多次点击它时......可以清楚地看到此功能的行为不正确.

然而,WhatsApp在开始时扬声器关闭,3秒后它激活它和它的工作.有没有人遇到类似的东西,可以给我一个解决方案?

Youtube视频链接,以展示我的问题

xcode ios whatsapp swift callkit

22
推荐指数
2
解决办法
1562
查看次数

我可以在后台观察来电和去电吗?

当我的应用程序在前台时,它需要轻松检测呼叫事件,如呼叫连接,呼叫断开,但当我的应用程序进入后台时,它不会检测到任何呼叫事件.

所以,我怎么可以检测呼叫事件,如呼入呼出的背景是什么?我正在研究CallKit框架iOS 10XCode 8.我发现iOS 10中已经弃用了核心电话框架.

我正在使用CXCallObserverDelegatePattern观察呼叫.

我想计算呼叫期间来电和去电的通话时长.

iphone objective-c ios callkit

14
推荐指数
1
解决办法
1544
查看次数

如何在使用CallKit应答呼叫后保留iOS本机呼叫UI

我试图获得相同的结果,可以在使用CallKit 增强VoIP应用程序的 29:52秒看到- WWDC 2016.在该视频中,它显示在应答呼叫之后,按钮被动画移动和更改,并且屏幕保持在原生呼叫中UI.

我构建了扬声器盒并尝试了"模拟来电"功能,但是一旦通过应答呼叫按钮应答呼叫(视频上显示的操作相同),本机呼叫屏幕就会消失,应用程序屏幕显示为活动状态列表中显示的呼叫(与WWDC视频中显示的不同):

在此输入图像描述

虽然在从Incoming Call本机UI转换到应用程序的过程中有一个本机调用UI屏幕非常短的时间,但我找不到如何强制它留在该屏幕上.在调试Speakerbox应用程序之前,没有任何委托方法被调用,直到所有本机屏幕都消失并且应用程序已经打开.

我已经测试了在屏幕被锁定时接收来电,在这种情况下显示了本机UI:

在此输入图像描述

我想在非锁定手机上取得同样的效果.

voip call wwdc ios10 callkit

13
推荐指数
1
解决办法
1759
查看次数

检测IOS 10中的GSM呼叫状态(Swift 3,Xcode 8)和来自后台状态的通知

TLDR:从后台检测呼叫结束事件 请参阅以下问题的更新:

是否可以使用Swift从后台状态检测/获取IOS 10中的呼叫状态事件.在早期版本中有一个CORE Telephony api,但现在似乎已经弃用了.

我见过CallKit Api, 但它说这是基于VOIP的呼叫.我需要获得正常的CDMA/GSM呼叫状态,而不是基于VOIP的呼叫,并且当呼叫结束时只需向服务器发出通知.我不需要访问任何可能是隐私问题的数据点,只需要一个事件,当呼叫结束时,然后我的应用程序将是一个后台应用程序将启动.而已.有关如何做到这一点的任何指示?

更新:使用CallKit Api虽然无法区分voip和普通的GSM呼叫,但我能够获得呼叫状态.我可以解决这个问题.我也可以通过以下方式获得本地通知.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        application.beginBackgroundTask(withName: "showN", expirationHandler:nil)
        return true
    }

extension AppDelegate: CXCallObserverDelegate {
       func callObserver(_ callObserver: CXCallObserver, callChanged call: CXCall) {
        if call.hasEnded == true {
            print("Disconnected")
            let trigger = UNTimeIntervalNotificationTrigger(timeInterval:60,repeats:false)
            let identifier = "MyCallLocalNotification"
            let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger)
            center.add(request, withCompletionHandler: …
Run Code Online (Sandbox Code Playgroud)

ios core-telephony swift ios10 callkit

13
推荐指数
2
解决办法
2902
查看次数

间歇和临时iOS钥匙串故障

我们有一个应用程序,它严重依赖于能够使用iOS访问用户的会话令牌Keychain.当我们的应用程序打开时,首先检查的是令牌是否可用 - 如果没有,我们会向用户显示登录屏幕.我们不使用任何第三方库,并使用Keychain's SecItemAdd()/ SecItemCopyMatching()直接使用以下选项:

  • kSecClassGenericPassword
  • kSecAttrAccessibleAlwaysThisDeviceOnly

在正常使用期间,我们看到很少甚至没有问题.

问题

我们已经有用户报告,在打开他们的应用程序时,他们会显示登录屏幕(建议Keychain无法找到值),当他们实际登录时.我们发现在这个例子中,我们发现在杀死和重新启动时该应用程序,用户恢复正常(会话被发现Keychain).一旦我们发现这一点,我们尝试添加一个指数退避来继续查询Keychain,认为它可能只在前几秒内不可用.这不起作用,并向我们证明Keychain似乎无法用于整个应用程序启动会话.我们无法重现此问题.它似乎非常间歇性地发生.

经过进一步调查,我们发现通常,用户在遇到此问题之前已收到VoIP推送.我们仍然无法可靠地重现这个问题,但是在调试时发现我们Keychain.session被发现是nil在接收这些推送时(我们也依赖它),这是在用户打开他们的应用程序之前看到他们是伪"退出".

我们使用PushKitPKPushRegistry进行VoIP推送.这要求我们的应用程序启用"后台模式:IP语音".我们按照Apple的文档建议使用所有这些.这是一个示例:

func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType) {
    guard let _ = Keychain.session else {
        print("Session token not available")
        return
    }
    handle(notification: payload.dictionaryPayload)
}
Run Code Online (Sandbox Code Playgroud)

此代码依赖于Keychain.session在接收VoIP推送时立即可用.如前所述,我们已经看到了它不可用的实例,因此这个函数退出并简单地返回.

我也发现了这个相关的Apple论坛帖子,暗示这可能是一个iOS错误.

有谁可以帮我们解决这个问题?任何帮助将不胜感激.即使这实际上是一个iOS错误,我们也可以采用解决方法.

keychain ios swift pushkit callkit

12
推荐指数
2
解决办法
600
查看次数

iOS 13 Killing应用程序,因为它在收到PushKit VoIP回调后从未向系统发布来电

升级到iOS Beta 13之后,我注意到了一件不愉快的事情:我的应用有时会因传入的VoIP推送而崩溃。

在崩溃报告中,我看到以下内容:

iOS 13 Killing app because it never posted an incoming call to the system after receiving a PushKit VoIP callback 

Fatal Exception: NSInternalInconsistencyException
0  CoreFoundation                 0x1af21b9f0 __exceptionPreprocess
1  libobjc.A.dylib                0x1af7284fc objc_exception_throw
2  CoreFoundation                 0x1af11efec + 
 [_CFXNotificationTokenRegistration keyCallbacks]
3  Foundation                     0x1aeda1330 -[NSAssertionHandler 
 handleFailureInMethod:object:file:lineNumber:description:]
4  PushKit                        0x19caa6b54 -[PKPushRegistry 
 _terminateAppIfThereAreUnhandledVoIPPushes]
5  libdispatch.dylib              0x1afa441ec _dispatch_client_callout
6  libdispatch.dylib              0x1af9f6c6c 
_dispatch_lane_barrier_sync_invoke_and_complete
7  PushKit                        0x19caa5b74 __73-[PKPushRegistry 
 voipPayloadReceived:mustPostCall:withCompletionHandler:]_block_invoke
8  libdispatch.dylib              0x1afa43678 
 _dispatch_call_block_and_release
9  libdispatch.dylib              0x1afa441ec 
  _dispatch_client_callout

10 libdispatch.dylib              0x1af9f61f8 
_dispatch_main_queue_callback_4CF$VARIANT$mp
11 CoreFoundation                 0x1af1992a0 
CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE …
Run Code Online (Sandbox Code Playgroud)

voip apple-push-notifications pushkit callkit ios13

11
推荐指数
1
解决办法
5275
查看次数

如何在使用Callkit接受调用后保留本机UI

我正在使用Callkit和Linphone开发iOS voip应用程序.当我收到来电时,系统显示本机电话用户界面,用户接受或拒绝接听电话,当用户点击接听按钮时,呼叫开始但电话用户界面消失.

如何在用户接听电话后保留原生手机用户界面,例如whatsapp吗?

此外,如何在开始拨出电话时显示本机电话用户界面?

这是我的providerDelegate代码:

func reportIncomingCall(uuid: UUID, handle: String, hasVideo: Bool = false, completion: ((NSError?) -> Void)? = nil) {
    // Construct a CXCallUpdate describing the incoming call, including     the caller.
    let update = CXCallUpdate()
    update.remoteHandle = CXHandle(type: .generic, value: handle)
    update.hasVideo = hasVideo

    // Report the incoming call to the system
    provider.reportNewIncomingCall(with: uuid, update: update) { error in
        /*
         Only add incoming call to the app's list of calls if the call was allowed (i.e. there was no …
Run Code Online (Sandbox Code Playgroud)

voip ios linphone swift callkit

10
推荐指数
1
解决办法
3939
查看次数

Callkit可以阻止除白名单联系之外的所有通话吗?

是否可以在iOS 11中创建白名单呼叫阻止应用程序?

例如,我想阻止除联系人列表中的所有号码以外的所有号码.

看起来api只允许您创建要阻止的数字列表,而不是允许的数字列表.

https://developer.apple.com/documentation/callkit

whitelist ios callkit

10
推荐指数
1
解决办法
870
查看次数

基于Flutter的呼叫记录应用程序,具有本机UI集成

我正在尝试使用flutter,CallKit(iOS)和ConnectionService(Android)使电话录音与本机UI集成一起使用。

由于没有关于将flutter与CallKit和ConnectionService或任何其他服务集成以实现无需root访问权限或越狱即可进行类似于系统的呼叫记录的指南,因此这个问题已经存在。有许多可用于越狱设备的应用程序,而android本身支持呼叫记录,但是没有具体的指南来实现使用flutter的实现。

将flutter 1.7与AndroidX支持结合使用可实现棉花糖+ ConnectionService的向后兼容性。

预期结果是自动记录呼叫或提示用户在有来电时进行记录。

当前根本无法做到这一点,也许我缺少文档中必不可少的东西,或者我没有足够的专门知识来成功执行使用flutter创建系统支持的呼叫记录应用程序。

android ios flutter callkit call-recording

10
推荐指数
1
解决办法
666
查看次数

当从锁定屏幕应答呼叫时,iOS麦克风无法正常工作或无法通过webrtc发送语音

我正在使用Webrtc和Callkit进行呼叫.当应用程序是前台时,一切正常,但如果屏幕被锁定,我接听电话音频只能在我这边工作(我可以听到音频,但我的声音没有发送).

当用户进入应用程序时,一切都已修复.

所有后台设置和功能都已正确设置.

<key>UIBackgroundModes</key>
   <array>
        <string>audio</string>
        <string>fetch</string>
        <string>remote-notification</string>
        <string>voip</string>
    </array>
Run Code Online (Sandbox Code Playgroud)

我尝试使用RTCAudioSession和AVAudioSession配置音频,但在这两种情况下它都以相同的方式工作.

voip ios webrtc swift callkit

9
推荐指数
1
解决办法
539
查看次数