开发者社区 问答 正文

移动推送 iOS SDK: 推送通知收不到排查步骤该做什么?



1. 检查手机端

  • App允许接收通知。
  • App在后台运行,因为在iOS系统中,如果App在前台,就不会收到弹窗和通知中心的通知(iOS 10+,前台通知触发回调处理完成后,调用completionHandler可实现前台通知弹出,具体参考iOS 10通知适配 - 4.4.2)。

检查手机端的推送配置,可以通过如下的方法来判断手机端是否能从苹果APNs服务端拿到Device Token。
  1. [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]void[backcolor=transparent])[backcolor=transparent]application[backcolor=transparent]:([backcolor=transparent]UIApplication[backcolor=transparent] [backcolor=transparent]*)[backcolor=transparent]application didFailToRegisterForRemoteNotificationsWithError[backcolor=transparent]:([backcolor=transparent]NSError[backcolor=transparent] [backcolor=transparent]*)[backcolor=transparent]error
  2. [backcolor=transparent]{
  3. [backcolor=transparent]    [backcolor=transparent]NSLog[backcolor=transparent](@[backcolor=transparent]"didFailToRegisterForRemoteNotificationsWithError %@"[backcolor=transparent],[backcolor=transparent] error[backcolor=transparent]);
  4. [backcolor=transparent]}

如果配置不对,就会报错。
  • 检查代码中是否有调用unregisterForRemoteNotifications接口(远程推送注销接口),设备调用该接口后无法收到苹果APNs推送通知。


2. 检查推送模式


  • iOS的通知推送,走的是苹果官方的APNs通道,本身区分开发环境和生产环境。

  • 开发时安装到手机的App,只能以开发模式推送,使用APNs Sandbox推送证书。

  • 正式发布后,通过App Store安装的App,只能以生产模式推送,用APNs Production推送证书;生产环境通知测试,参考移动推送iOS SDK: Ad Hoc App如何进行生产环境推送通知测试?

  • 如果推送模式选错,或者推送证书传错,苹果的APNs服务端就会认为该Device Token无效,无法推送通知。

  • OpenAPI的推送高级接口,可以通过设置iOSApnsEnv参数选择推送模式。


3. 检查IDE设置


Xcode 8开始,会出现一个推送开关,请保证它是处于打开状态
若没有打开推送开关,会触发deviceToken注册错误回调:didFailToRegisterForRemoteNotificationsWithError:,提示下述错误:
  1. [backcolor=transparent]Error[backcolor=transparent] [backcolor=transparent]Domain[backcolor=transparent]=[backcolor=transparent]NSCocoaErrorDomain[backcolor=transparent] [backcolor=transparent]Code[backcolor=transparent]=[backcolor=transparent]3000[backcolor=transparent] [backcolor=transparent]"未找到应用程序的“aps-environment”的授权字符串"[backcolor=transparent] [backcolor=transparent]UserInfo[backcolor=transparent]=[backcolor=transparent]0x1740741c0[backcolor=transparent] [backcolor=transparent]{[backcolor=transparent]NSLocalizedDescription[backcolor=transparent]=未找到应用程序的“[backcolor=transparent]aps[backcolor=transparent]-[backcolor=transparent]environment[backcolor=transparent]”的授权字符串


4. 推送证书合法性校验

  • 在推送控制台检查推送证书是否在有效期内,证书配置参考iOS推送证书设置
  • 也可以通过第三方工具快速测试您的APNs推送证书信息是否正确,例如:https://github.com/noodlewerk/NWPusher


5. 设备关机

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

展开
收起
猫饭先生 2017-10-24 09:41:50 1945 分享 版权
阿里云 AI 助理回答

您提到的问题主要围绕iOS设备接收推送通知的故障排查,这涉及到客户端应用配置、服务器端设置以及设备状态等多个方面。针对您的描述,以下是一些基于阿里云产品(尤其是移动推送服务)的建议和解决方案:

1. 手机端检查

  • 确保App权限:用户需要确认App有接收通知的权限。在iOS系统中,可以在“设置”里为特定App开启通知。
  • 后台运行与前台通知:如您所述,iOS限制了前台App直接显示通知,但可以通过代码适配来处理前台通知。如果使用的是阿里云移动推送服务,确保集成的SDK版本支持当前iOS系统,并正确实现了通知的回调处理。

2. 推送模式与证书

  • 环境匹配:确保使用的推送证书与App的部署环境相匹配。开发阶段使用Sandbox环境的证书,发布后切换到Production环境的证书。阿里云移动推送服务允许通过API参数指定推送环境。
  • 证书有效性:定期检查APNs证书是否过期或正确上传至阿里云推送控制台。可以利用NWPusher等工具验证证书的有效性。

3. IDE设置

  • 推送开关:在Xcode项目设置中,确保“Capabilities”->“Push Notifications”已开启,并且项目的“aps-environment”设置正确(Development或Production)。

4. 设备状态

  • 关机与消息保留:苹果APNs确实只保留一条未读通知给关机后的设备。这不是一个可调整的设置,但开发者可以通过优化推送策略,比如发送通知时携带唯一标识,以便于客户端处理重复或过时的通知。

阿里云移动推送服务特别提示:

  • 配置检查:在阿里云移动推送控制台,检查应用的推送配置,包括AppKey、Target Platform等是否正确设置。
  • 日志分析:利用阿里云提供的日志服务,分析推送失败的日志,找出具体原因,比如是否有Device Token无效、网络问题等。
  • 高级功能:利用阿里云移动推送的标签、别名等功能,实现更精准的消息推送,同时也可以通过推送统计查看推送效果,帮助诊断问题。

综上所述,解决iOS设备无法接收到推送通知的问题,需要从多个角度综合考虑和排查。阿里云移动推送服务提供了全面的文档和工具支持,帮助开发者高效定位并解决问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答