概述
本文主要介绍iOS端推送通知失败的排查步骤及其解决方法。
详细信息
阿里云提醒您:
如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
检查手机端
检查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”的授权字符串
推送证书合法性校验
设备关机
设备关机后推送通知,苹果APNs只保留最后一条通知,因此在重新开机后,只能收到最后一条通知。
适用于
移动推送