我有一个VoIP应用程序。它曾经在没有CallKit的情况下可以工作,所以它具有自己的应用内通话界面。我现在正在集成CallKit UI来处理在应用未运行时发生的调用,并且有一个问题:
建议什么方法来检测CallKit UI被关闭并切换到应用内UI的时刻?
目前,我发现CallKit UI在两种情况下消失了:
为了产生应用内用户界面,建议使用什么方法检测这些条件?
我不想一直启动应用程序内UI的原因是性能和逻辑。我认为在CallKit UI位于屏幕顶部时显示和更新控件和视频视图(该应用程序具有视频支持)会很浪费。如果我能够检测到需要UI切换并在那时创建一个UI,对我来说会更合逻辑。
我查看了CallKit API,但没有找到任何目的。
答案 0 :(得分:1)
对于第二个用例,我在AppDelegate中具有如下逻辑:
func applicationWillEnterForeground(_ application: UIApplication) {
maybeShowCallUi()
}
fileprivate func maybeShowCallUi() {
if CallManager.shared.calls.count > 0 {
print("One or more calls active.")
DispatchQueue.main.async() { [weak self] in
print("Trying to show in call UI.")
self?.showInCallViewController()
}
} else {
print("No calls active.")
}
}
我的CallManager对象类似于Apple提供的SpeakerBox示例代码。它会跟踪所有呼叫。
答案 1 :(得分:0)
用户接听电话后,应会看到应用程序呼叫屏幕。为此,在以下方法内编写代码以使应用程序调用屏幕可见。
- (void)provider:(CXProvider *)provider performAnswerCallAction:(nonnull CXAnswerCallAction *)action {
//show call screen here.
}