【问题标题】:APNS (Apple Push Notification Service) reliabilityAPNS(Apple 推送通知服务)可靠性
【发布时间】:2012-12-03 13:40:40
【问题描述】:

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

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

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

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

【问题讨论】:

  • 是的,它不可靠,在这个词的正常网络意义上。
  • 后台推送消息到APNS也是你控制的吗?在这种情况下,如果向 APNS 的某些发送失败,您应该能够记录,并且您可以查看反馈服务是否包含未收到消息的设备的令牌。
  • 感谢约翰的快速回复!如果您在谈论服务器端,是的,它们由我们的 PHP 服务器控制。根据我们负责服务器端开发的一位开发人员的说法,目前看来 APNS 消息已成功发送。设备有时会收到通知,有时不会。我对这些 APNS 的事情感到困惑和疯狂......
  • @Nate Aw,真可惜……从某种意义上说,也许你是对的。但是我们客户所谓的“iOS 大师”说“APNS 发送消息绝不会失败!”也许他只是一个“苹果迷”之类的?
  • 我不知道他是不是苹果迷,但从技术上讲,他在这个问题上是错误的。它says it right in the documentation。搜索“尽力而为”。

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


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

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

【讨论】:

  • 感谢您的明确答复!即使在文档状态和许多真正的开发人员解释它,我们的空头客户也不会相信 APNS 不是 100% 可靠的......也许他们在案例 2 上进行了测试并且没有收到通知。我们不能使用第三方实现,但无论如何感谢您的好建议!
  • 请注意:实施推送器的建议并不是一个完整的解决方案,因为推送器不会处理离线或应用程序未运行时丢失的消息。我对推送消息可靠性的最佳解决方案的建议是使用具有服务质量序列号(时间戳)的同步到同步(在其中下载并显示所有消息),一旦推送到达,它就会回调服务器。如果它没有到达,请再次发送同步到同步推送。这样可以实现100%的交付。当然,这取决于您的需求。
  • 首先你必须处理证书垃圾..然后你必须处理 apns 的不可靠性..
  • Or just implement pusher... 我不明白,因为 Pusher 只使用 APNs 和 FCM,它们都是不可靠的服务。 Pusher 不会增加可靠性。
【解决方案2】:

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

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

【讨论】:

  • 如果最终用户设备关闭怎么办?
  • 如何阻止原始消息被传递(根据我们的经验,有时最多 3 分钟后...... :(
【解决方案3】:

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

【讨论】:

【解决方案4】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    相关资源
    最近更新 更多