6月17日,在做项目的推送问题时,更新了推送voip的接口,但是还是没有接收到推送。所以查阅了以下资料:我的项目包括短信推送和语音通话推送。短信推送用的APNS 远程推送,更新接口后没有问题,语音通话用的VoIP 推送,更新服务器接口后不能使用。
APNS 远程推送:指由苹果服务器发送的推送消息,带文字提示和语音提示,无法唤起 App。
APNS 远程推送 (普通消息推送) 表现为手机屏幕上弹窗以及文字提示,声音一般为系统铃声,该推送完全由系统处理,App 无法激活以及处理任何程序,铃声可以由 App 进行设置,时间长度最长为 30 秒
VoIP 远程推送:由苹果服务器发起,没有任和文字和铃声的展示,可以唤起 App 执行程序。
VoIP 推送 (PushKit 推送) 该推送没有任和提示,也没有弹窗和文字提示,只是将 App 唤起,App 可以执行代码。iOS 13 之前收到 VoIP 推送时由于苹果不强制 App 使用苹果 CallKit 系统库,用户点击后自动进入音视频接听界面。从 iOS13 开始苹果为防止 VoIP 推送被非来电功能滥用,禁止在非来电功能中使用 VoIP 推送,如果使用 VoIP 推送只能使用 iOS 系统的 CallKit.framework 库,如果不使用 iOS 系统的 CallKit.framework 库,App 在收到 VoIP 推送后会被杀掉,表现上就类似于没有收到 VoIP 推送。
由于苹果限制中国区域使用 iOS 系统的 CallKit.framework 库,导致 VoIP 推送功能也无法在苹果商店审核通过,所以将原有 VoIP 推送方案改为使用 APNS 远程推送的方式接收音视频信令。
相同点: 铃声和文字提示效果相同,点击通知条或者启动 App 时直接进入音视频来电接听界面
不同点: 受 APNS 推送限制铃声最长为30秒,且震动效果只震动一下,与其他收到普通消息的震动效果相同。持续震动效果可通过 APP 层 Notification Service Extension 相关逻辑来实现,且需要与非音视频的普通推送区分开,否则类似文字消息的推送也会变成长震动。
所以,我觉得项目全部使用APNS 推送,语音推送,因为需要从推送点进去应用,仍能收到语音通话请求,所以在
- (void)applicationWillEnterForeground:(UIApplication *)application
方法中加入了 NSData *data = [Packet capsuleVoipConfirmation:[[LoginParams sharedInstance] ssi] ];
向服务器发送VoipConfirmation,服务器就会将存储的incoming信令再次发给我。
这样问题就解决了。
参考:
https://support.rongcloud.cn/ks/MTAzMg==