APNS(Apple推送通知服务)的可靠性

时间:2012-12-16 00:44:24

标签: ios push-notification apple-push-notifications

我们的应用使用APNS接收推送通知。但是,我们的客户声称他们的一些设备没有收到通知,并声称他们“必须”确保通知100%交付。但我已经阅读somewhere,APNS并非100%可靠,并且应该存在未通知通知的情况。

我目前对如何确保随时收到APNS感到恐慌。我已经阅读了a case可能未提供APNS(设备可能离线)。但我们的测试表明即使设备在线(Wifi或3G),有时APNS也没有交付。

是否有任何特定案例可能无法提供APNS?或者我们(开发人员)可以使用代码来确保接收所有通知吗?我在代码中所做的只是将应用程序注册到远程通知并写入didRegisterForRemoteNotificationsWithDeviceToken,然后将设备令牌丢弃到我们的服务器。

任何帮助都将不胜感激,因为如果他们的所有设备都没有接收APNS,我们的客户几乎会杀了我们!

4 个答案:

答案 0 :(得分:45)

  1. APNS基于Apple服务器,Apple不保证成功传递消息。
  2. 如果应用程序在通知到达时打开(即用户正在使用该应用程序),iOS不会显示通知消息,您需要处理它。
  3. 只有在应用程序背景或被杀死时才会显示通知。
  4. 还在您的服务器端实施反馈服务;将帮助您摆脱旧的不需要的令牌(删除应用程序或通过设置禁用通知的用户)。
  5. 请勿在短时间内向设备发送过多通知,因为APN仅缓存1条消息/设备(如果设备处于脱机状态)。因此它可以在设备联机时传递消息。我不知道邮件缓存了多长时间。
  6. 或者只是实施Pusher ...... http://pusher.com

答案 1 :(得分:8)

我们面临着同样的问题。正如大家所说,APNS是尽力而为服务,因此您不能确定每个通知都会被传递,但您可以做的是确定已收到哪些通知。这就是我们即将要做的事情。我们在后端注册每个通知que ship ,移动应用程序会报告它收到的每个通知。然后我们设置等待收到通知的最长时间,如果我们没有收到报告,我们会再试一次。

我希望它可能对某人有帮助(甚至2年后)

答案 2 :(得分:3)

它在Apple Docs中非常清楚地表明它不是100%保证,也不应该如此使用。它以“尽力而为”的方式发送。

答案 3 :(得分:0)

根据Apple的指导原则,APNS不是100%可靠的服务,这意味着您的应用可能无法获得Apple服务器的推送通知,原因如下:

  • 设备已离线
  • 您的应用处于前台状态,您需要管理推送通知。

注意:Apple拒绝使用通知服务强制使用的应用。 (我在我的一个应用程序中遇到过它)

有关详细信息,请查看此答案

https://stackoverflow.com/a/25830955/3278326