iOS端推送通知失败的排查步骤

概述

本文主要介绍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”的授权字符串

推送证书合法性校验

  • 在推送控制台检查推送证书是否在有效期内,证书配置请参见iOS推送证书设置

  • 也可以通过第三方工具快速测试您的APNs推送证书信息是否正确,详情请参见NWPusher

设备关机

设备关机后推送通知,苹果APNs只保留最后一条通知,因此在重新开机后,只能收到最后一条通知。

适用于

  • 移动推送