测试 APNs 远程推送
完成 APNs 集成步骤以后,可直接测试推送是否集成成功。
准备测试 App
安装方式 | 发布方式 | 描述文件类型 | 推送至 APNs Sandbox 环境 | 推送至 APNs Production 环境 |
---|---|---|---|---|
Xcode run(模拟器) | / | / | / | / |
Xcode run(真机) | / | 开发 | 支持,必须使用融云应用开发环境的 App Key 和 APNs 配置。 | 不支持 |
IPA 文件 | Development | 开发 | 支持,必须使用融云开发环境的 App Key 和 APNs 配置。 | 不支持 |
第三方 App 平台(如,蒲公英) | Ad Hoc | Ad Hoc 发布 | 不支持 | 推荐使用融云应用生产环境的 App Key 和 APNs 配置。 |
第三方 App 平台(如,蒲公英) | Enterprise | Enterprise 发布 | 不支持 | 推荐使用融云应用生产环境的 App Key 和 APNs 配置。 |
TestFlight | App Store Connect | App Store 发布 | 不支持 | 支持,但必须使用融云应用生产环境的 APNs 配置。 |
App Store | App Store Connect | App Store 发布 | 不支持 | 支持,但必须使用融云应用生产环境的 App Key 和 APNs 配置。 |
准备推送测试环境
融云应用区分开发与生产环境,使用不同的 App Key。融云服务端向 APNs 发送推送请求时可能有多种组合,
必要条件:
- 使用真机:请使用真机进行测试,模拟器收不到远程推送。
- 使用未越狱的设备:请勿使用越狱的设备,已越狱的设备可能收不到远程推送。
- 确认 BundleID 中未包含通配符:使用通配符 BundleID 的 App 将无法使用远程推送。
打包指导:
-
通过 Xcode 在真机运行时,请使用融云应用的开发环境的 App Key,在融云应用的开发环境中,如果使用 P8、P12 证书,融云服务端仅向 APNs Sandbox 环境推送,如果使用 P12 通用证书,应配置为推送到 APNs Sandbox 环境。
-
通过 Development 方式打包时,请使用融云应用的开发环境的 App Key,在融云应用的开发环境中,如果使用 P8、P12 证书,融云服务端仅向 APNs Sandbox 环境推送,如果使用 P12 通用证书,应配置为推送到 APNs Sandbox 环境。
-
使用 Ad-Hoc/TestFlight/AppStore 方式打包时,建议使用融云应用的生产环境的 App Key(需要在融云控制台申请上线)。只要是 生产环境的 App Key,融云服务端仅向 APNs Production 环境推送。
例外情况:在融云应用的开发环境中,如果使用 P12 通用证书,允许配置为向 APNs Production 环境推送,以满足测试需求。
如有疑问,您可以参考 Xcode 帮助文档:
- Xcode 帮助文档:Distribute to registered devices (iOS, tvOS, watchOS)。
- Xcode 帮助文档:Distribute an app using TestFlight (iOS, tvOS, watchOS)。
测试接收推送
建议先使用比较简单的单聊场景测试推送。步骤如下:
- App 连接融云成功之后杀掉 App 进程。
- 访问控制台的 IM Server API 调试页面,找到消息 > 消息服务 >发送单聊消息,直接给当前 App 用户发送一条单聊消息内容。
- 查看手机是否收到推送。
故障排除
如果未能收到推送,请先检查以下项目:
- 如果客户端断开连接时设置了不允许推送,例如调用了
logout
方法,则会彻底注销在融云服务端的登录信息。融云服务端仅记录离线消息,但不会触发推送服务。 - 如果 App 用户已在 Web/PC 端在线,此时融 云认为用户在线,默认不会给移动端发送推送通知。如有需要,您可以在控制台免费基础功能页面调整 Web/PC 在线手机端接收 Push 开关设置。
- 如果 App 用户使用多台移动端设备,融云服务端仅向最后一个登录的设备发送推送通知。
您可以通过控制台的「北极星」查看消息发送与接收状态,以及具体的推送错误:
-
访问控制台的「北极星」消息流转页面,切换到正确的环境(开发/生产),根据页面提供的搜索条件搜索消息,点击查询。
-
在查询结果页面,找到需要排障的消息,点击「接收状态」栏中的查看。
-
在目标用户消息接收状态下,检查消息已通过推送下发给消息收件人。如果出现问题,该页面会显示具体原因。
-
根据以下错误,排查是否已参照文档正确集成 APNs:
常见推送错误码 问题原因 解决方案 P16 该消息不属于融云内置类型消息类型(详见消息类型概述),缺少推送通知内容(pushContent),因此无法推送。 如果发送自定义消息类型的消息,且需要支持推送,则必须在发送消息时设置 pushContent。 P17 收件人设置了全局免打扰 排查是否设置了对应功能。详见全局免打扰。 P19 收件人设置了单个会话的免打扰 排查是否设置了对应功能。详见免打扰功能概述 或 超级群免打扰功能概述。 P23 deviceId 为空 设置 deviceToken。请检查集成步骤是否已完成。详见集成 APNs 远程推送中的设置 deviceToken。 P60 加密消息没有推送 无 PUSH_I9 证书加载错误 检查融云控制台是否上传了正确的推送证书。请检查集成步骤是否已完成。详见集成 APNs 远程推送。如确认证书无误,请联系融云继续排查。 Rong_DeviceToken_Invalid 上传的 deviceToken 有误 设置 deviceToken。请检查集成步骤是否已完成。详见集成 APNs 远程推送中的设置 deviceToken。 APNS_4_4_null 证书过期 排查推送证书是否过期,如果过期,需要重新上传到融云控制台,如确认证书未过期,请联系融云继续排查。 APNS_A2_2400{"reason":"BadDeviceToken"} 打包环境有误 请检查在融云后台上传的证书类型、配置、与您使用的 provisioning file 是否完全匹配。 PUSH_IP8_ERR 打包环境有误 请检查在融云后台上传的证书类型、配置、与您使用的 provisioning file 是否完全匹配。 APNs_XXX 推送至苹果后失败,XXX 为 APNs 错误码 参考 Apple 官方开发者文档的 APNs 错误码说明 Communicating with APNs。 您可以在知识库中查询北极星消息流转返回的全部推送错误码。
-
如果问题持续,可直接提交工单,提供您的消息 ID 与查询结果。