原因:“杀死应用程序是因为它在收到 PushKit VoIP 推送回调后从未向系统发送来电。”

Dan*_*ari 5 voip ios swift pushkit callkit

我正在寻找解决方案,但尚未找到任何解决方案。我的应用程序仅接收 VoIP 推送,在 iOS 13 之后,当应用程序处于后台模式时,我无法再接收推送。我查看了其他问题,但无法通过提出的解决方案解决我的问题。有人可以帮助我吗?

在 iOS 13.0 及更高版本上,必须在收到传入 IP 语音呼叫时以及在 didReceiceIncomingPush() 方法完成执行之前使用 CallKit 框架进行报告,否则系统将终止您的应用程序。

多次未能报告来电可能会导致您的应用无法接收更多来电通知。

基本上,您不能再使用 VoIP 推送来发送非 VoIP 消息,并且需要对这些消息使用常规推送通知。

我读了这个公告,但在我的应用程序中,对于特定类型的推送 VoIP,我无法使用函数reportNewIncomingCall(),因为它需要如下参数:uuid、handle、hasVideo ecc。并且这些参数不存在于有效负载中。

pep*_*psy 5

自 iOS 13 起,您只能使用 VoIP 推送来报告来电。对于不是来电的推送,您必须使用其他替代方案(请在此处查看此答案)。

多次未能报告来电可能会导致您的应用无法接收更多来电通知。

从我的测试来看,它似乎在报告失败 2 或 3 次后就阻止了所有 VoIP 推送,并且它会保持阻止状态大约 24 小时。

因为它需要如下参数:uuid、handle、hasVideo ecc。并且这些参数不存在于有效负载中

如果您收到新来电的 VoIP 推送,但仍然没有上面列出的所需信息,您可以使用“虚拟”值初始化呼叫,然后更新它们。例如,将 RemoteHandle 设置为CXHandle(type: .generic, value: "Connecting..."),然后使用正确的值更新它:

cxCallUpdate.remoteHandle = CXHandle(type: .emailAddress, value: "email@mail.com")
cxProvider.reportCall(with: callUid, updated: cxCallUpdate)
Run Code Online (Sandbox Code Playgroud)