iOS端推送通知收不到的排查步骤及其解决方法
概述
本文主要介绍iOS端推送通知收不到的排查步骤及其解决方法。
准备工作
iOS推送通知收不到的可能原因
设备过期/未开启通知权限/应用在前台/未获取deviceToken
用错推送环境【常见】
推送参数错误
Xcode 推送开关关闭
推送证书过期或失效
设备关机
检查手机端
通过EMAS控制台排查工具查看设备有效性(设备从最后一次活跃时间开始90天内没活跃过就会被删除),以及设备基本信息 如:是否注册apns token、 推送开关状态 等。
推送通知时,App需处于后台或关闭状态。
iOS 10以下系统中,如果App在前台,不会收到弹窗和通知中心的通知。
iOS 10及以上系统前台通知触发回调处理完成后,调用completionHandler可实现前台通知弹窗,详情请参见iOS10通知适配。
检查手机端的推送配置,可以通过手机端是否能从苹果APNs服务端拿到Device Token来判断。
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { NSLog(@"didFailToRegisterForRemoteNotificationsWithError %@", error); }
检查代码中是否有调用unregisterForRemoteNotifications接口(远程推送注销接口),设备调用该接口后,无法收到苹果APNs推送的通知。
检查推送环境
APNs 推送通知环境
苹果APNs通道区分开发环境和生产环境
开发环境(Sandbox)
使用场景:适用于开发和测试阶段。
App安装途径:通过Xcode直接安装到设备。
推送证书:使用Sandbox推送证书。
生产环境(Production)
使用场景:适用于正式发布和Ad Hoc测试。
App安装途径:通过App Store安装,或者通过TestFlight安装。
推送证书:生产推送证书。
生产环境通知测试,请参考Ad Hoc App如何进行生产环境推送通知测试。
常见错误
BadDeviceToken:如果推送环境选错,或者推送证书传错,苹果的APNs服务端就会认为该Device Token无效,无法推送通知。常见控制台排查错误的推送状态为失败,失败原因为BadDeviceToken,请检查安装包并使用正确的推送环境。
iOSApnsEnv
:OpenAPI的Push - 高级推送中,服务端可以通过设置iOSApnsEnv
参数设置推送环境。重要注意“iOSApnsEnv”的i要小写 ,否则参数无效。推送环境默认是生产环境。
检查推送参数
iOSInterruptionLevel
:iOS15新增参数,如果设置为passive
:系统在不点灯、不播放声音的情况下将通知添加到通知列表中。此时容易感知不到通知的送达。如无必要,请设置iOSInterruptionLevel
="active"。检查设备是否绑定:在使用别名、账号、标签进行推送时,容易出现测试设备不在别名、账号、标签设备列表中的情况,可通过OpenApi查询测试设备的是否绑定在推送Target中。
检查IDE设置
Xcode 8开始,会出现一个推送开关,请保证它是处于打开状态。
若没有打开推送开关,会触发deviceToken注册错误回调(didFailToRegisterForRemoteNotificationsWithError:),提示下述错误信息:
Error Domain=NSCocoaErrorDomain Code=3000 "未找到应用程序的“aps-environment”的授权字符串" UserInfo=0x1740741c0 {NSLocalizedDescription=未找到应用程序的“aps-environment”的授权字符串
检查推送证书合法性
设备关机
设备关机后推送通知,苹果APNs只保留最后一条通知,因此在重新开机后,只能收到最后一条通知。
适用于
移动推送