iOS - 从 APNS 重新发送 Apple 推送通知

Posted

技术标签:

【中文标题】iOS - 从 APNS 重新发送 Apple 推送通知【英文标题】:iOS- Apple push notification resend from APNS 【发布时间】:2013-09-11 11:55:18 【问题描述】:

从 Apple 的文档中我了解到,如果设备处于离线状态,APNS 会保留最后一个通知,并在设备重新在线时将其发送到设备。有什么机制可以避免重发吗?

【问题讨论】:

NO 一旦你向 APNS 发送请求,你什么也做不了。 用户特定是什么意思? 我的问题是我的应用被来自同一设备的不同用户使用。我可以在线处理它,但我的应用程序具有离线注销功能。因此,如果一个用户离线注销,则设备在线。是否可以到达已经向我的设备发送推送通知? 你应该重新考虑这个问题应该接受哪个答案。 【参考方案1】:

正确答案是

如果您使用enhanced binary format(包含消息标识符和过期时间的那个)发送通知,您可以使用过期参数来防止通知存储在 APN 服务器中。这样,只有在 APN 服务器第一次尝试发送通知时设备在线时才会发送通知。

到期

以秒 (UTC) 表示的固定 UNIX 纪元日期,用于标识通知何时不再有效并且可以被丢弃。到期值使用网络字节顺序(大端)。如果到期值为正,APNs 会尝试至少发送一次通知。 指定零(或小于零的值)以请求 APN 根本不存储通知

【讨论】:

更新 Apple 发布了一个在 HTTP/2 中实现的新端点。您仍然可以提供 Expiry 作为请求的 HTTP 标头。【参考方案2】:

答案是

这是苹果的说法,

如果 APNs 尝试发送通知但设备处于离线状态, 通知在有限的时间段内存储,并交付 当设备可用时发送到设备。

仅存储特定应用程序的一个最近通知。 如果在设备离线时发送了多个通知,则每个 新通知会导致先前的通知被丢弃。这 仅保留最新通知的行为称为 合并通知。

如果设备长时间处于离线状态,任何通知 被丢弃了。

【讨论】:

您好 Prem Kumar 感谢您的快速回复。我想知道当我的目标用户退出但我的设备在线时我是否会收到推送通知。在这种情况下还有什么方法可以限制这些消息? 用户已注销是什么意思?您的意思是用户已禁用您的应用程序的推送通知吗?【参考方案3】:

我同意伊兰的观点。

只有当到期日期不为零时,您的问题“APNS 会保留最后一个通知并在设备重新联机时将其发送到设备”才是正确的。

如果您确实希望在手机上网时发送消息,则消息将等到“到期日期”才会被丢弃。

APNS 文档:

到期日期 4 个字节 以秒 (UTC) 表示的 UNIX 纪元日期 标识通知何时不再有效并且可以 丢弃。 如果此值非零,APNs 会存储通知 尝试至少发送一次通知。将零指定为 表示通知立即过期并且 APNs 根本不应该存储通知

更多详情请参考https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/CommunicatingWIthAPS.html

【讨论】:

此处更新了文档链接。查找 apns-expiration 的描述:developer.apple.com/documentation/usernotifications/…

以上是关于iOS - 从 APNS 重新发送 Apple 推送通知的主要内容,如果未能解决你的问题,请参考以下文章

Apple 的 APNS 交付有时很慢

我们如何跟踪从 IBM MobileFirst 7.0 发送到 Apple APNS 服务器的推送通知?

Apple APNS - 一秒钟内应该从服务器发送多少推送

从 Apple APNS 接收设备令牌所需的时间

使用 Apple 的推送通知服务 (APNS) 避免重复

IOS 9中的Apple推送通知[重复]