iOS 收不到消息 / 排查不出请根据第 5 点说明提供信息
注:Android 收不到排查戳这里
首先确认推送是否是成功的,消息是否是正确的
调 API 推送或官网推送时,官网是否显示已成功, API 是否返回 HTTP code 200 和 msgid
是否调用的是推送校验的 API ,消息实际没有推送出去
若失败,官网会在页面上方提示,API 会返回错误码,根据错误码在列表中找到报错原因,在社区搜索该报错有更详细的排查步骤。
你 API 推送消息所使用的 Appkey 是否与你客户端配置的 Appkey 不一致?请仔细检查。
你是否推送的是自定义消息而不是通知消息,自定义消息只有当 App 处于前台时才会接收,且默认是不展示的。
推送时 通知内容(Alert)是否为空 ,官网图示,为空则不展示
推送时选择的环境与测试设备的打包环境必须一致。两种环境的正确测试姿势点我
API 推送的时候通过参数 apns_production 来指定推送环境,false 为开发环境,true 为生产环境。V3 api不带此参数则默认为生产环境,V3 API 封装的 SDK 默认设定为开发环境。如果调 API 时有手动传 apns_production 则以此值为准。参数的文档说明
其次确认客户端是否已经集成成功
确认 AppKey 在 SDK 客户端的设置与 官网应用信息 上的是一致,其他环节也按照文档正确地操作。
检查 官网 上上传的证书,是 APNs (Push) 证书,参考 iOS 证书设置指南,且官网证书状态为已验证。
是否可以获取到 RegistrationID 的值(能取到表示集成成功),若取不到 ID 请获取一下客户端日志信息,是否有报错内容,将日志信息提供给官方分析。
是否可以取到 token 值并上报 token 给极光成功?从 3.0.9 版本开始,在未取到 token 的情况下也会取到 registrationID ,可以使用自定义消息,但无法收到通知,请务必查看客户端日志检查 token 的获取情况。取不到 token 的排查点我
初始化代码中 apsForProduction:isProduction 的值需要与客户端的证书环境保持一致。
客户端配的 bundleID 和极光官网配的 bundleID 必须一致才能收到 Notification 通知消息。着重注意检查 Bundle ID 的一致性
最后确认客户端是否可以正常接收 / 展示推送消息
在官网推送历史详情中看到目标已送达,代表极光已成功的将信息发给了 Apple 服务器,等待 Apple 服务器的处理,高峰期可能存在延迟问题。
确认测试手机已成功连入网络(可以切换网络来判断是否该网络运营商有问题),如果设备离线,期间推送多条,APNs 服务器只会离线保留一条(极光服务器对自定义消息离线可保留 5 条)
Apple 服务器对 apns 消息并不保证 100% 送达,特别是高峰期、网络波动时做高频推送会出现漏消息的情况。Apple 网络要求
iOS 不支持在模拟器上测试推送功能,因为没法获取到 token 值。
检查是否调用了反注册代码 [[UIApplication sharedApplication] unregisterForRemoteNotifications];
客户端处于前台运行状态还是后台,iOS 10 系统以下处于前台,收到通知不会提醒。
是否在某种操作下调用了清除角标的 API ,角标清除,通知栏消息就会马上消失。
手机端—设置—通知—提醒方式是否设置了横幅提醒
初始化注册时的提醒类型选择了 alert 了没有:entity.types = JPAuthorizationOptionAlert|JPAuthorizationOptionBadge|JPAuthorizationOptionSound;
XCode 8 以上有一个新的功能,开启后才能收到推送通知
- 「使用 JPush iOS SDK 注意事项」,强烈建议阅读。
可以对比测试 官网推送 和 API 推送,若只有某一方收不到,请对比推送历史—详情—找到两条消息的区别
安装的应用同一时间最多只能收到一个环境的 APNs 消息。
如果能收到生产的通知,说明应用当前环境是生产的,那此时就无法收到开发环境的通知,反之亦然。
两种环境的正确测试姿势点我
根据上述内容排查未果,提供如下信息给官方协助查询
- 请说明你根据排查步骤已确认有哪些信息是正确的,没有收到推送的依据是什么?务必提供如下两个信息,复制粘贴为文本,缺一不可:
- Message ID(调用 API 请求成功后会返回 msgid ,官网 - 推送历史 - 操作 - i 详情里面也可以查看该信息,如果查不到历史请注意筛选条件,历史只保存 30 天)
- 测试设备的 registrationID(不管是广播、别名、标签还是其他方式推送,均必须提供该信息,只有 registrationID 才能精准定位到你的设备),该信息只能在客户端调 API 获取,服务端无法取到,服务端若需存储请让客户端获取后上传 。
iOS 的 registrationID 获取方法点我
如果对你有帮助,点个赞 呗ლ(╹◡╹ლ)
点这里返回常见问题目录,不吹不黑,收藏本帖可以解决你 90% 的问题 (ノ◕ω◕)ノଘ_ଘ
0条评论