当手机离线时,GCM 会存储消息列表或仅存储最后一条消息,就像 APNS 一样?

Posted

技术标签:

【中文标题】当手机离线时,GCM 会存储消息列表或仅存储最后一条消息,就像 APNS 一样?【英文标题】:When phone is offline GCM stores a LIST of messages or only the last one, just like APNS? 【发布时间】:2015-02-20 20:35:59 【问题描述】:

我已经阅读了很多关于它的内容,但正如文档所述: 1. GCM 连接服务器在设备离线时将消息入队并存储。 2.当设备在线时,GCM连接服务器向设备发送消息。

这部分“向设备发送消息”让我感到困惑。它是否传递列表消息?

【问题讨论】:

我不是该主题的专家,但希望在互联网连接恢复后,手机离线时收到的消息的处理方式与在线消息完全相同。没有清单,而是一一发给你需要处理的收货人。 感谢您的回应。我使用术语“列表”作为一堆一条一条地发送的消息。相比之下,Apple 只存储设备的最后一条消息,并在设备在线时立即发送。我不确定谷歌的行为是否相同。 【参考方案1】:

这取决于您在从服务器发送消息时可以设置的一些选项。 这里有两件事要记住:collapse_keytime_to_live 设置。

折叠键用于send-to-sync messages,而不是带有有效负载的消息。正如@NickT 所提到的,如果您只希望在设备重新联机时将同一折叠键下的最新消息发送到客户端设备,则可以使用折叠键。另一方面,带有有效负载的消息总是被传递。

time_to_live 设置对于离线客户端设备很重要。它允许您指定消息在 GCM 服务器中保留多长时间,同时等待设备上线。它的默认值为 4 周。如果您将其设置为较低的值并且设备在该范围内没有上线,GCM 可能会丢弃该特定消息。

有关这些的更多详细信息,请参阅this 页面。

【讨论】:

谢谢,就是这样。需要区分这两个属性。引用的链接也很有帮助。 Koh,你知道它在 Apple APNS 上是如何工作的吗?是否有对应的“collapse_key”或“send-to-sync”?【参考方案2】:

如果您将每条消息的 collapse_key 设置为不同的值,则它们都(最大数量)都被传递。如果 collapse_keys 都具有相同的值,则只交付最新的。

【讨论】:

感谢您的回答,我会通过一些测试来检查它。

以上是关于当手机离线时,GCM 会存储消息列表或仅存储最后一条消息,就像 APNS 一样?的主要内容,如果未能解决你的问题,请参考以下文章

当用户在Android中使用XMPP离线时向用户发送通知

Firebase - 互联网离线时上传图片

想要在设备离线时将数据存储在本地数据库中,并在在线时从数据库中获取并发送到服务器

当设备在 react-native 中离线时,在 webview 中显示本地图像

在 Tigase 中向客户端发送自定义消息

当用户在 quickblox 的 ios 中离线时获取消息