5

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

4

3 回答 3

17

正确答案是YES

如果您使用增强的二进制格式(包括消息标识符和到期时间的格式)发送通知,您可以使用 expiry 参数来防止通知存储在 APN 服务器中。这样,只有在 APN 服务器第一次尝试发送通知时设备在线时才会发送通知。

到期

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

于 2013-09-11T15:06:27.480 回答
6

答案是否定的

这是苹果所说的,

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

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

如果设备长时间保持离线状态,则为它存储的所有通知都将被丢弃。

于 2013-09-11T12:19:58.207 回答
2

我同意伊兰的观点。

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

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

APNS 文档:

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

有关更多详细信息,请参阅https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/CommunicatingWIthAPS.html

于 2015-02-23T14:00:23.603 回答