我在Ionic应用程序中使用Parse进行推送通知。虽然当设备在线时推送通知在iOS和Android中都能正常工作,但当设备脱机然后在线时,Android和iOS中的行为会有很大差异。
在Android中,收到设备离线时发送的所有通知。在iOS中,会发生以下任一情况:
这种看似随机的行为是否会在APNS中出现,或者是否有一些我在Parse中缺失的设置?我还读到,在这种情况下不应该依赖APNS。
答案 0 :(得分:2)
From the official APNS documentation:
Apple推送通知服务包括服务质量(QoS) 执行存储转发功能的组件。
如果APN尝试发送通知和目标设备 离线时,APN会在一段有限的时间内存储通知 并在设备再次可用时发送。
此组件仅存储每台设备的最新通知 和每个应用程序。如果设备处于脱机状态,则发送通知请求 定位该设备会导致先前的请求被丢弃。如果 设备长时间保持脱机状态,所有存储的通知 在APN中被丢弃。
Apple推送通知服务包括服务质量(QoS) 执行存储转发功能的组件。如果APN尝试 通过APN发送通知并且目标设备处于脱机状态 将通知存储在有限的时间段内并将其发送 当设备再次可用时。此组件仅存储 每台设备和每个应用的最新通知。如果是设备 离线,发送针对该设备的通知请求 先前的请求被丢弃。如果设备保持脱机状态 很长一段时间,它在APN中存储的所有通知都被丢弃了。
对于GCM,您可以使用collapse keys实现类似的行为:
此参数标识一组消息(例如,使用 collapse_key:“可用更新”)可以折叠,仅限于此 在可以恢复交付时发送最后一条消息。这是 旨在避免在发送时发送过多相同的消息 设备重新联机或变为活动状态(请参阅delay_while_idle)。
请注意,无法保证邮件的获取顺序 发送。强>
iOS上的随机行为似乎很奇怪,但可能只是因为推送通知不是100%保证交付,也不是按发送顺序排列。