我有一个 VoIP 应用程序,它使用 CallKit 和 PushKit。当应用程序关闭并且 iOS 收到推送通知时,应用程序已在后台模式下被唤醒,它通过 CallKit 接听电话,一切正常,大约持续 50 秒。在那之后,iOS 用信号 9 杀死了应用程序。我选择了下一个背景模式:音频和voip,但 iOS 想要更多的东西来继续无限的后台任务。
我忘记做什么来防止系统杀死我的应用程序?
PS当我在前台调用我的应用程序时,通话会持续数小时。那么它不是内存压力是应用程序被杀的原因。
我有一个 VoIP 应用程序,它使用 CallKit 和 PushKit。当应用程序关闭并且 iOS 收到推送通知时,应用程序已在后台模式下被唤醒,它通过 CallKit 接听电话,一切正常,大约持续 50 秒。在那之后,iOS 用信号 9 杀死了应用程序。我选择了下一个背景模式:音频和voip,但 iOS 想要更多的东西来继续无限的后台任务。
我忘记做什么来防止系统杀死我的应用程序?
PS当我在前台调用我的应用程序时,通话会持续数小时。那么它不是内存压力是应用程序被杀的原因。
在开发者帐户上创建 VoIP 证书后,在后台模式下启用以下字段
1] Audio and Airplay
2] Voice over IP
3] Background fetch
4] Remote notifications
唤醒时需要调用 [UIApplication beginBackgroundTaskWithExpirationHandler]
我在阅读调试控制台时发现,我的应用程序使用 90% 以上的 CPU 来应答后台呼叫。这就是iOS杀死我的应用程序的原因。
您是否使用原始的预构建?该版本有一个 WebRTC 错误,稍后修复。它会导致纯语音呼叫的 CPU 使用率过高(issue5506)。切换到 WebRTC pod 来解决这个问题 ( https://cocoapods.org/pods/WebRTC )。
迁移到 WebRTC pod 将比更改依赖项花费更多时间,因为 API 发生了一些变化。不过变化不大,所以一两天内就可以了。在任何情况下,切换到官方 pod 都是可行的方法,因为不再维护从原始的构建。