推送配置
推送配置概述
iOS 推送分为 APNs 推送和 VoIP 推送。收到 VoIP 推送后,App 可以弹出苹果 CallKit 或 LiveCommunicationKit 来电界面。
中国区 App Store 不支持集成苹果 CallKit 的 App 上架。集成 APNs 或苹果 LiveCommunicationKit 的 App 可以提交中国区 App Store 审核。
APNs 推送
如需配置 APNs 远程推送,请参阅 IM 推送配置。
使用 APNs 普通推送会有以下影响:
- APNs 远程推送(普通消息推送)会在手机屏幕上显示弹窗和文字提示,声音通常为系统铃声。该推送完全由系统处理,App 无法被 APNs 推送激活,也无法在收到推送时执行处理逻辑。铃声可由 App 设置,最长为 30 秒(苹果官方文档)。
- 震动效果只会触发一次,与收到普通消息时的震动效果相同。如需实现长时间震动,需要在 App 层实现 Notification Service Extension,并与非音视频的普通推送区分开,否则文字消息等普通推送也会触发长震动。可参考示例 Demo:RongCallVibrate。该 Demo 仅实现普通推送的长震动效果。
- 收到 APNs 普通推送时,系统不会直接激活 App。用户点击通知条后,App 才会启动。App 启动完成且 IM 连接成功后,
RongCallKit会自动弹出音视频来电接听界面。 - 在手机系统的通知设置中,需要开启 App 通知,在手机解锁时勾选横幅提醒,并将横幅风格设置为持续。否则通知条会在弹出几秒后自动收起,来电铃声也会终止。该行为由 iOS 系统控制,融云 SDK 无法控制。
VoIP 推送
与常规 APNs 推送相比,VoIP 推送(VoIP Push Notification)是 iOS 8 之后推出的推送能力,需要依赖 PushKit.framework。与 APNs 类似,VoIP 推送也可以在 App 处于终止状态时唤醒 App。
客户端需要通过 PushKit 框架从苹果获取 VoIP Token。CallPlusLib 已实现 PushKit 相关能力,但默认未开启。您需要手动调用 setVoipPushKitEnable 开启。
- 如果您的 App 不需要提交中国区 App Store 审核,您可以集成苹果的 CallKit 框架。
- 如果您的 App 需要提交中国区 App Store 审核,您可以集成苹果的 LiveCommunicationKit 框架。
国内使用苹果 CallKit 的限制
苹果 CallKit 开发框架最早在 iOS 10 发布。它支持 VoIP 应用将通话功能集成到 iPhone 系统通话能力中。用户收到第三方应用的语音或视频来电时,可以看到与普通来电或 FaceTime 来电一致的系统界面。
2018 年 5 月前后,苹果要求在中国区 App Store 发布的应用停止使用 CallKit 功能。包含 CallKit 功能的应用在提交审核时会 被拒绝,拒绝原因通常与工信部相关要求有关。此后,微信、钉钉等包含音视频通信能力的 iOS 应用也取消了 CallKit 功能。
禁用 CallKit 后,在中国区 App Store 上架的第三方应用无法再提供与普通来电或 FaceTime 来电一致的系统来电体验。
VoIP 推送配置
VoIP 推送证书配置
申请 VoIP 证书
-
在苹果开发者后台 Certificates, Identifiers & Profiles 中,选择左侧的 Certificates,然后点击加号(+)新建证书:

-
选择证书类型 VoIP Services Certificate,然后点击 Continue:

-
绑定用于生成证书的 App ID(通常为 Bundle ID),然后点击 Continue:

-
系统提示需要上传 Certificate Signing Request(CSR) 时,打开 钥匙串访问 > 证书助理:

-
在证书助理中填写邮箱,并选择 存储到磁盘:

-
选择刚才生成的 CSR,然后点击 Continue 生成 VoIP 证书:

-
下载并打开证书,然后从钥匙串中导出
.p12格式的证书备用:
上传 VoIP 证书
-
按控制台内嵌指南将 IM 服务功能配置页面(page_code: im_service_config)嵌入到管理后台后,进入 离线推送 > 应用标识及推送证书管理,选择生产环境,然后点击对应应用的 设置推送:
-
上传刚才导出的
.p12证书,输入推送证书密码,然后点击保存设置:
-
按控制台内嵌指南将 RTC 服 务功能配置页面(page_code: rtc_service_config)嵌入到管理后台后,进入 基础配置 > VoIP 推送转 APNs 推送,选择生产环境,并确保 VoIP 配置处于关闭状态:
设置 provisioning profile
- 在 Xcode 中设置
provisioning profile。苹果 VoIP Push 只提供生产环境证书,因此 VoIP 推送只能在生产环境使用。 - 打包时,需要将
provisioning profile设置为distribution,才能收到 VoIP 推送。关于如何在 Xcode 中设置provisioning profile,请参考 Xcode 官方文档。
客户端配置
开启 VoIP 功能
您需要调用 setVoipPushKitEnable: 接口开启远程 VoIP 推送功能。SDK 内部会自动设置 PushKit 推送代理。
[[RCCallPlusClient sharedInstance] setVoipPushKitEnable:YES];
接入推送回调
您需要在 RCCallPlusClient 的 RCCallPlusEventDelegate 实现类中实现以下方法,并在方法中弹出系统 CallKit 或 LiveCommunicationKit。
- (void)didReceiveVoIPPushNotification:(NSString *)callId
inviterUserId:(NSString *)inviterUserId
mediaType:(RCCallPlusMediaType)mediaType
userIdList:(NSArray *)userIdList
userDict:(NSDictionary *)userDict;
设置 Background Modes
在工程设置中,依次选择 Capabilities > Background Modes:
- Xcode 9 之前,勾选 Voice over IP 和 Remote Notifications:

Xcode 9 及之后版本,需要在 Info.plist 中按下图配置:

完成上述集成后,请在生产环境测试 VoIP 推送是否 集成成功。
生产环境测试
- 模拟器收不到 VoIP 推送。
- 越狱的设备可能收不到 VoIP 推送。
- 使用通配符 Bundle ID 的 App 无法使用 VoIP 推送。
-
方案一: 如果 App 为 App Store 类型但尚未上架,并且需要在上架前使用生产环境测试远程推送,请生成一个 Ad Hoc Provisioning Profile,并在 Xcode 中使用该配置文件打包,导出为 Ad Hoc Deployment。参考 Xcode 官方文档。
-
方案二: 开发者可以使用 TestFlight 模式测试。参考 Xcode 官方文档。