【移动推送】iOS端推送通知失败的排查步骤是什么?
检查手机端
检查App是否被授权允许接收通知。
推送通知时,App需处于后台或关闭状态,因为在iOS 10以下系统中,如果App在前台,不会收到弹窗和通知中心的通知。iOS 10及以上系统前台通知触发回调处理完成后,调用completionHandler可实现前台通知弹窗,详情请参见iOS 10通知适配。
检查手机端的推送配置,可以通过如下的方法来判断手机端是否能从苹果APNs服务端拿到Device Token, 如果配置不对,就会报错。
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
NSLog(@"didFailToRegisterForRemoteNotificationsWithError %@", error);
}
检查代码中是否有调用unregisterForRemoteNotifications接口(远程推送注销接口),设备调用该接口后,无法收到苹果APNs推送的通知
检查推送模式
iOS端的推送通知使用的是苹果官方的APNs通道,本身区分开发环境和生产环境。
开发时安装到手机的App,只能以开发模式推送,即使用APNs Sandbox推送证书。
正式发布后,通过App Store安装的App,只能以生产模式推送,即使用APNs Production推送证书。
生产环境通知测试,请参见Ad Hoc App如何进行生产环境推送通知测试。
如果推送模式选错,或者推送证书传错,苹果的APNs服务端就会认为该Device Token无效,无法推送通知。常见控制台排查错误的推送状态为失败,而失败原因的原因为apns token失效。
OpenAPI的推送高级接口中,服务端可以通过设置 iOSApnsEnv 参数设置推送模式。注意“iOS”的i要小写 ,否则默认推送的是生产模式。
检查IDE设置
Xcode 8开始,会出现一个推送开关,请保证它是处于打开状态。 若没有打开推送开关,会触发deviceToken注册错误回调(didFailToRegisterForRemoteNotificationsWithError:),提示下述错误信息:
Error Domain=NSCocoaErrorDomain Code=3000 "未找到应用程序的“aps-environment”的授权字符串" UserInfo=0x1740741c0 {NSLocalizedDescription=未找到应用程序的“aps-environment”的授权字符串
推送证书合法性校验
在推送控制台检查推送证书是否在有效期内,证书配置请参见iOS推送证书设置。
也可以通过第三方工具快速测试您的APNs推送证书信息是否正确,详情请参见NWPusher。
设备关机
设备关机后推送通知,苹果APNs只保留最后一条通知,因此在重新开机后,只能收到最后一条通知。
更多官方信息
EMAS官网介绍:https://www.aliyun.com/product/emas
Devops:https://www.aliyun.com/product/emascrash/mobile_devops
移动热修复:https://www.aliyun.com/product/hotfix
移动测试:https://www.aliyun.com/activity/emas/mqcexpert
移动推送:https://www.aliyun.com/product/cps
HTTPDNS:https://www.aliyun.com/product/httpdns
EMAS 控制台: https://emas.console.aliyun.com/products
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。