这个问题困扰着我大约两个星期。在SO,Apple的文档或Apple开发者论坛上,我找不到任何直接回答此问题的信息。我构建了一个支持VoIP的应用程序,并实现了PushKit,CallKit和CXProviderDelegate,它们在该应用程序中都可以正常工作。但是,如果用户在终止其应用程序后收到呼叫,则该呼叫将在CallKit和CXCallController上显示iOS的本机呼叫UI很好,但是一旦用户接听电话,它将打开该应用程序(如果设备已解锁,或在设备解锁后立即打开应用程序),但我找不到在我设计的Call UI上打开应用程序的方法。
我不确定需要在哪里显示Call UI。我试图在rootViewController(这是我的LoginVC)中构建一些逻辑,以检查它们是否在viewDidAppear(_:)
中处于活动状态,但是,当以这种方式打开应用程序时,似乎未调用此函数。
我已经查阅了这些教程和SO文章:(没有一个引用此特殊情况)
Ray Wenderlich's CallKit Tutorial
CallKit iOS Swift Tutorial for VoIP Apps
Switching from CallKit UI to in-app UI
How to display a ViewController when answering a call with CallKit
[当用户接听电话时,该应用程序已在后台启动。
[我要做的是在NotificationCenter
的provider(_:perform:)
方法内触发一个操作(例如,使用回调或使用CXProviderDelegate
),然后将显示您的呼叫UI。
func provider(_ provider: CXProvider, perform action: CXAnswerCallAction)
{
guard callManager.callWithUUID(action.callUUID) != nil else {
action.fail()
return
}
presentCallUICallback(completion: { action.fulfill() })
}