iOS在一分钟内杀死CallKit VoIP应用程序在后台工作
Posted
技术标签:
【中文标题】iOS在一分钟内杀死CallKit VoIP应用程序在后台工作【英文标题】:iOS kills CallKit VoIP app working in background in one minute 【发布时间】:2016-11-17 07:42:10 【问题描述】:我有一个 VoIP 应用程序,它使用 CallKit 和 PushKit。 当应用程序关闭并且 ios 收到推送通知时,应用程序已在后台模式下被唤醒,它通过 CallKit 接听电话,一切正常,大约持续 50 秒。 之后,iOS 使用信号 9 杀死应用程序。 我选择了下一个后台模式:audio 和 voip,但 iOS 想要更多的东西来继续无限的后台任务。
为了防止我的应用被系统杀死,我忘了做什么?
附:当我在前台调用我的应用程序时,通话会持续数小时。那么就不是内存压力是app被杀的原因了。
【问题讨论】:
【参考方案1】:在开发者帐户上创建 VoIP 证书后,在后台模式下启用以下字段
1] Audio and Airplay
2] Voice over IP
3] Background fetch
4] Remote notifications
【讨论】:
【参考方案2】:唤醒后需要调用[UIApplication beginBackgroundTaskWithExpirationHandler]
【讨论】:
谢谢,但我不需要运行任何有限长度的任务,我已经找到了问题的原因。 能告诉我原因吗?【参考方案3】:我希望您已授予如下屏幕的权限。
iOS 使用信号 9 终止应用,这是由于内存泄漏或内存使用率低造成的。
你可以用仪器检查。
【讨论】:
【参考方案4】:我在阅读调试控制台时发现,我的应用在后台接听电话时使用了 90% 以上的 CPU。 这就是 iOS 杀死我的应用的原因。
【讨论】:
那么,您的解决方案是什么? 嗨@adnako,我使用CallKit,当用户在后台接听电话时,总是没有,但有时苹果会用信号9杀死我的应用程序,你找到任何解决方案了吗?我在后台只使用了 5% 的 CPU.. 嗨@Steven,很遗憾,我不再从事这个项目了,您是否使用 Instruments 来检查您的应用程序是否也没有使用大量内存?或者它可能在主线程中冻结? @adnako,是的,我检查了,它使用的内存很少,唯一使用非常高的能量,但对于 Voip 应用程序来说这是正常的,因为它使用网络。 @Steven,对不起,我不知道。您是否为 TestFlight 构建了应用程序以在 iPhone 设置中获取崩溃日志?【参考方案5】:您使用的是原始版本的预构建吗?该版本有一个 WebRTC 错误,稍后修复。它会导致纯语音呼叫 (issue5506) 的 CPU 使用率过高。切换到 WebRTC pod 来解决这个问题 (https://cocoapods.org/pods/WebRTC)。
迁移到 WebRTC pod 比更改依赖项需要更多时间,因为 API 发生了一些变化。不过变化不大,所以一两天内就可以了。在任何情况下,切换到官方 pod 都是可行的方法,因为不再维护从原始的构建。
【讨论】:
以上是关于iOS在一分钟内杀死CallKit VoIP应用程序在后台工作的主要内容,如果未能解决你的问题,请参考以下文章
使用 CallKit 显示用于拨出 VoIP 呼叫的 iOS 本机呼叫 UI
CallKit + WebRTC:在 iOS 中按下锁定/电源按钮时 CallKit 通话断开
如何在 swift 4 iOS 中将 Callkit 与 Agora VOiP 集成?