iOS Callkit 和后台模式

iOS Callkit and Background Mode

我正在编写一个 VoIP 应用程序,它在应用程序处于后台时使用 CallKit。基本上一切正常,CallKit 可以很好地在来电期间在后台推送应用程序。

据我了解,一旦进入后台并完成所有未完成的任务,该应用程序就会进入 'hibernation' 并停止与外界通信。现在让应用程序恢复活力的唯一方法是当 iOS 操作系统告诉它 - 当操作系统检测到传入的 VoIP 呼叫时,它将把它传递给应用程序,然后应用程序将活着回来接电话。

我的问题是:偶尔我的应用程序崩溃或用户退出,在这种情况下它无法接听电话。如果发生这种情况时它在后台,我怎么知道?我想要某种方式告诉呼叫者他无法呼叫,因为接收者无法访问? iOS 操作系统仍会尝试推送。

如果您正在使用 PushKit(这实际上是实现静默推送通知的推荐方式),当推送通知到达系统时,将调用下面的委托函数。

func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType, completion: @escaping () -> Void)

以上函数前面会有

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool

当推送通知到达时应用程序终止或崩溃。

VoIP 推送通知的概念是以最节能的方式唤醒应用程序。因此,它将帮助您唤醒订户以通知呼叫。