37

我们的应用程序使用 APNS 来接收推送通知。但是,我们的客户声称他们的一些设备没有收到通知,并争辩说他们“必须”确保 100% 发送通知。但我在某处读到过,APNS 不是 100% 可靠的,应该存在通知未传递的情况。

我目前对我们如何确保随时接收 APNS 感到恐慌。我读过一个可能 APNS 未交付的案例(设备可能离线)。但我们的测试表明,即使设备在线(Wifi 或 3G),有时 APNS 也无法发送。

是否有任何特定情况可能导致 APNS 无法交付?或者我们(开发人员)可以用代码做些什么来确保收到所有通知?我在代码中所做的只是将应用程序注册到远程通知并写入 didRegisterForRemoteNotificationsWithDeviceToken,然后将设备令牌扔给我们的服务器。

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

4

4 回答 4

46
  1. APNS 基于 Apple Servers,Apple 不保证消息的成功传递。
  2. 如果通知到达时应用程序处于打开状态(即用户正在使用应用程序),iOS 不会显示通知消息,您需要对其进行处理。
  3. 仅当应用程序被后台或终止时才会显示通知。
  4. 同时在您的服务器端实施反馈服务;将帮助您摆脱旧的不需要的令牌(通过设置删除应用程序或禁用通知的用户)。
  5. 不要在短时间内向设备发送太多通知,因为 APNS 仅缓存 1 条消息/设备(如果设备离线)。因此,它可以在设备上线时传递消息。我不确定消息被缓存了多长时间。

或者只是实现 Pusher... http://pusher.com

于 2012-12-16T03:35:33.917 回答
8

我们面临同样的问题。正如大家所说,APNS 是一项尽力而为的服务,因此您无法确定每条通知都会送达,但您可以做的是确定已收到哪些通知。这就是我们要做的。我们在后端注册每个通知队列移动应用程序会报告它收到的每个通知。然后我们设置等待收到通知的最长时间,如果我们没有收到报告,我们再试一次。

我希望它可能对某人有所帮助(即使是 2 年后)

于 2014-11-28T19:18:33.990 回答
4

它在 Apple Docs 中非常清楚地表明它不是 100% 保证的,也不应该这样使用。它是“尽最大努力”发送的。

于 2013-07-12T04:40:34.663 回答
0

根据 Apple 的指导方针,APNS 不是 100% 可靠的服务,这意味着您的应用可能由于以下一些原因而无法从 Apple 服务器获得推送通知:

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

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

有关更多信息,您可以查看此答案

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

于 2018-03-23T06:36:01.723 回答