首页 > 解决方案 > 从锁定屏幕接听电话后显示自定义 UI

问题描述

我开发了一个呼叫应用程序,例如 Whatapp 和 skype。我的问题是,当我的手机被锁定并且另一个用户打电话给我时,我会从锁定屏幕收到通知,如果我滑动通知,则会自动接听电话。(当然使用 callkit)

我只是想知道当我的手机解锁时是否有可能看到 callkitUI 屏幕与其他用户呼叫我时相同?

如果有人知道有关它的详细信息、解决方案或任何信息,那将非常有帮助。

我已经检查了以下文件。

苹果呼叫套件

使用 PUSHKIT + CALLKIT 增强您的 VOIP 应用程序用户体验

iOS 的 CallKit 教程

这是我的代码。

func provider(_ provider: CXProvider, perform action: CXAnswerCallAction) {

    action.fulfill()

    print("=================CXAnswerCallAction============")

    self.window = UIWindow(frame: UIScreen.main.bounds)
    let storyboard = UIStoryboard(name: "VoipAcceptUser", bundle: nil)    
    let initialViewController = storyboard.instantiateViewController(withIdentifier: "VoipAcceptUser")     
    self.window?.rootViewController = initialViewController
    self.window?.makeKeyAndVisible()

}

标签: iosswiftcallkitcxprovider

解决方案


当应用程序在前台运行时,系统不会向您的应用程序提供呼叫屏幕。您必须自己提供呼叫屏幕。

通过使用CallKit框架,完全由系统决定是否显示来电屏幕。据我所知,仅在 3 个实例中,系统会为您的应用程序提供呼叫屏幕。

系统为 VoIP 呼叫提供呼叫屏幕时的已知实例:

  1. 当电话收到来自 VoIP 推送通知服务的 VoIP 呼叫时。通过使用 CallKit 框架,您需要向对象报告新的来电屏幕CXProviderDelegate

  2. 当电话有活动的常规(蜂窝)呼叫并收到 VoIP 呼叫时。如果您在 CXProviderConfiguration 中设置了您的 VoIP 应用程序允许处理多个呼叫,则此方法有效。如果您允许呼叫分组和呼叫保持,系统将为用户提供 UI 来处理常规呼叫和 VoIP 呼叫之间的切换

  3. 当电话有一个活动的常规呼叫,并且用户从后台开始拨出 VoIP 呼叫时,系统呼叫屏幕将保持打开状态,为用户提供 UI 以处理多个呼叫操作(如果您已允许在您的应用程序)

总结是您需要自己为 VoIP 应用程序提供 UI,至少需要拨出和活动呼叫屏幕,并根据呼叫状态相应地更新 UI。


推荐阅读