混合应用程序中的 VoIP 通知不起作用

VoIP notifications in hybrid apps not working

最近 Apple 更改了其处理 VoIP 通知的方式。现在他们强迫您在同一个 运行 循环中使用 CallKit,以免丢弃您的通知。我得到的痕迹是这个

Apps receving VoIP pushes must post an incoming call (via CallKit or IncomingCallNotifications) in the same run loop as  pushRegistry:didReceiveIncomingPushWithPayload:forType:[withCompletionHandler:] without delay.

当您收到此警告 3 次时,系统为 "dropping your notifications on the floor"。

这里的问题是我正在使用 phonegap-plugin-push 开发混合 VoIP 应用程序,我担心通知事件不够快(或者至少不一样 运行 循环) 对于 iOS.

有人遇到过这个问题吗?

我考虑过更改为常规推送通知,但我找不到让我的应用程序在被终止时重新启动并执行一些代码(例如启动 CallKit)的方法。

编辑: 我正在使用推送通知尝试这种方法,并且我已经配置了后台模式。我注意到在通知中发送 "content-available" 和一些数据,如 "badge" 或 "alert",如果应用程序最近进入后台,则会启动该应用程序。在后台 15 分钟后,推送通知到达,但应用程序不再启动

提前致谢。

我们的应用程序使用 CallKit 和推送通知,并在收到新来电的推送通知时启动。不过,它必须在项目构建中配置,并且 运行 一次注册 iOS。

我找到了解决方案:

由于 iOS 更改了有关处理 voip 推送通知的政策,它会强制您在收到 voip 时报告新来电:https://forums.developer.apple.com/thread/117939

这个插件可以做到:https://github.com/mattkhaw/cordova-plugin-callkit

它合并了两个插件(WebsiteBeaver/CordovaCall 和 Hitman666/cordova-ios-voip-push)。它对我有用。我只需要从 javascript 中删除 receiveCall 并稍微调整一下插件。

与 voip 通知寄存器相关的方法在 cordovaCall class 中,因此使用起来非常简单。