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

问题描述 投票:0回答:5

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

我目前对如何确保随时收到 APNS 感到恐慌。我读过一个案例,可能 APNS 未交付(设备可能离线)。但我们的测试表明,即使设备在线(Wifi 或 3G),有时 APNS 也无法交付。 是否有任何特定情况可能导致 APNS 无法交付?或者我们(开发人员)可以使用代码做些什么来确保收到所有通知?我在代码中所做的只是将应用程序注册到远程通知并写入 didRegisterForRemoteNotificationsWithDeviceToken,然后将设备令牌扔到我们的服务器。

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

ios push-notification apple-push-notifications
5个回答
48
投票
APNS 基于 Apple 服务器,Apple 不保证消息成功传送。
  1. 如果通知到达时应用程序处于打开状态(即用户正在使用该应用程序),iOS 不会显示通知消息,您需要处理它。
  2. 仅当应用程序进入后台或终止时才会显示通知。
  3. 同时在你的服务器端实现反馈服务;将帮助您摆脱旧的不需要的令牌(删除应用程序或通过设置禁用通知的用户)。
  4. 不要在短时间内向设备发送太多通知,因为 APNS 仅缓存/设备 1 条消息(如果设备离线)。因此它可以在设备上线时传递消息。但不确定消息被缓存多长时间。
  5. 或者只是实施 Pusher...
http://pusher.com


10
投票
ship

,然后移动应用程序报告它收到的每个通知。然后我们设置等待收到通知的最长时间,如果没有收到报告,我们会重试。 我希望这对某人有帮助(即使是2年后)

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


5
投票

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


1
投票
设备离线

您的应用程序处于前台状态,您需要管理推送通知。
  • 注意:Apple 拒绝强制使用通知服务的应用程序。 (我在我的一个应用程序中遇到过它)
  • 欲了解更多信息,您可以查看这个答案

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

在应用程序内实现自定义通知处理逻辑。


0
投票

准备自定义负载
    :通过 APNS 或 Firebase 云消息传递 (FCM) 等服务发送推送通知时,请包含一个自定义负载,其中每个通知都有唯一标识符。
  1. { “aps”:{ "alert": "这里是您的通知消息", “徽章”:1, “声音”:“默认” }, “custom_id”:“通知的唯一标识符” } 在您的应用程序中

    处理通知
  2. :在您的移动应用程序中实现必要的代码来处理传入的通知。收到通知后,从有效负载中提取自定义标识符。
  3. 本地更新状态
  4. :维护本地数据库或存储来存储每个通知的状态。收到通知后,在本地存储中将其标记为“已收到”。
  5. 向服务器发送确认
  6. :实现逻辑定期向服务器发送确认,指示设备已收到并处理通知。在确认负载中包含自定义标识符。
© www.soinside.com 2019 - 2024. All rights reserved.