从CallKit用户界面切换到应用内用户界面

时间:2018-07-12 11:15:21

标签: ios callkit

我有一个VoIP应用程序。它曾经在没有CallKit的情况下可以工作,所以它具有自己的应用内通话界面。我现在正在集成CallKit UI来处理在应用未运行时发生的调用,并且有一个问题:

建议什么方法来检测CallKit UI被关闭并切换到应用内UI的时刻?

目前,我发现CallKit UI在两种情况下消失了:

  1. 当应用程序进程未运行且设备已解锁(例如,在主屏幕上)且呼叫到达时,会首先显示CallKit UI,但是如果您接受呼叫(应答),则CallKit UI会消失立即,该应用就会出现。
  2. 当应用程序进程未运行且设备被锁定,呼叫到达,出现CallKit UI时,您接受呼叫(应答),然后按CallKit UI中的应用程序图标,然后再次按CallKit UI消失,然后出现该应用。

为了产生应用内用户界面,建议使用什么方法检测这些条件?

我不想一直启动应用程序内UI的原因是性能和逻辑。我认为在CallKit UI位于屏幕顶部时显示和更新控件和视频视图(该应用程序具有视频支持)会很浪费。如果我能够检测到需要UI切换并在那时创建一个UI,对我来说会更合逻辑。

我查看了CallKit API,但没有找到任何目的。

2 个答案:

答案 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. 
      }