我正在编写一个 VoIP 应用程序,它在应用程序处于后台时使用 CallKit。基本上一切正常,CallKit 可以很好地在来电期间在后台推送应用程序。
据我了解,一旦进入后台并且所有未完成的任务都已完成,该应用程序就会进入“休眠”状态并停止与外界通信。现在让应用程序恢复活力的唯一方法是当 iOS 操作系统告诉它时——当操作系统检测到传入的 VoIP 调用时,它将把它传递给应用程序并且应用程序将恢复活力并且接电话。
我的问题是:偶尔我的应用程序会崩溃或用户被注销,在这种情况下它无法接听电话。如果发生这种情况时它在后台,我怎么知道?我想要某种方式告诉调用者他无法调用,因为接收者无法访问? iOS 操作系统仍会尝试推送。
最佳答案
如果您正在使用 PushKit(这实际上是实现静默推送通知的推荐方法),当推送通知到达系统时,将调用下面的委托(delegate)函数。
func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType, completion: @escaping () -> Void)
上面的函数前面会有
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool
当推送通知到达时应用程序终止或崩溃。
VoIP 推送通知的概念是以最节能的方式唤醒应用程序。因此,它将帮助您唤醒订户以通知调用。
关于iOS Callkit 和后台模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49262819/