从 Apple 的文档中我了解到,如果设备离线,APNS 会保留最后一个通知,并在设备重新在线时将其发送到设备。是否有任何机制可以避免重新发送?
3 回答
正确答案是YES
如果您使用增强的二进制格式(包括消息标识符和到期时间的格式)发送通知,您可以使用 expiry 参数来防止通知存储在 APN 服务器中。这样,只有在 APN 服务器第一次尝试发送通知时设备在线时才会发送通知。
到期
以秒 (UTC) 表示的固定 UNIX 纪元日期,用于标识通知何时不再有效并且可以被丢弃。到期值使用网络字节顺序(大端)。如果到期值为正,APNs 会尝试至少发送一次通知。指定零(或小于零的值)以请求 APN 根本不存储通知。
答案是否定的
这是苹果所说的,
如果 APNs 尝试发送通知但设备处于离线状态,则通知会存储一段有限的时间,并在可用时发送到设备。
仅存储特定应用程序的一个最近通知。如果在设备离线时发送了多个通知,则每个新通知都会导致先前的通知被丢弃。这种只保留最新通知的行为称为合并通知。
如果设备长时间保持离线状态,则为它存储的所有通知都将被丢弃。
我同意伊兰的观点。
仅当到期日期不为零时,您的问题“APNS 保留最后一个通知并在设备重新联机时将其发送到设备”的这一部分才是正确的。
如果您确实希望在手机上网时发送消息,则消息将等到“到期日期”才会被丢弃。
APNS 文档:
到期日期 4 个字节 以秒 (UTC) 表示的 UNIX 纪元日期,用于标识通知何时不再有效并且可以被丢弃。如果此值非零,则 APNs 存储通知,尝试至少传递一次通知。指定零表示通知立即过期并且 APNs 根本不应该存储通知。