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

Fau*_*t V 35 push-notification apple-push-notifications ios

我们的应用程序使用APNS接收推送通知.但是,我们的客户声称他们的一些设备没有收到通知,并认为他们"必须"确保通知100%交付.但我已经在某处读过APNS不是100%可靠的,并且应该存在通知未交付的情况.

我目前对如何确保随时收到APNS感到恐慌.我已阅读的情况下,这可能APNS未送达(设备可能离线).但我们的测试表明即使设备在线(Wifi或3G),有时APNS也没有交付.

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

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

Kar*_*hik 45

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

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

  • 首先,你必须处理证书废话..那么你必须处理apns的不可靠性.. (7认同)
  • 请注意:实施推送器的建议不是一个完整的解决方案,因为推送器不处理离线时丢失的消息或应用程序未运行.我推荐的推送消息可靠性的最佳解决方案是使用同步到同步(您下载并显示所有消息的位置),其中服务质量序列号(时间戳)在推送到达后回调服务器.如果没有到达,请再次发送同步到同步推送.这可以实现100%的交付.当然这取决于你的需求. (5认同)
  • `或者只是实现 Pusher`...我不明白,因为 Pusher 只是使用 APN 和 FCM,而这两种服务都是不可靠的。**推动器不会增加可靠性。** (2认同)

pda*_*ire 8

我们面临着同样的问题.正如大家所说,APNS是一种尽力而为的服务,因此您无法确定每个通知是否都会发送,但您可以做的是确定已收到哪些通知.这就是我们即将要做的事情.我们在注册我们的后端每个通知阙和移动应用报告回来,每次收到通知.然后我们设置等待收到通知的最长时间,如果我们没有收到报告,我们再试一次.

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


ste*_*eve 5

Apple 文档中明确指出,它不是 100% 保证的,也不应该这样使用。它是“尽最大努力”发送的。

  • 在 https://developer.apple.com/library/IOs/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html 中查找“尽力而为” (2认同)