如何在不替换先前通知的情况下使用GCM接收多个通知?

20
我正在处理一个从GCM服务器接收通知的项目。
我已经从GCM服务器获得了注册ID,并将其发送到我的服务器应用程序,该应用程序将其保存在数据库中。
我的设备收到了消息,但当我尝试发送另一条消息时,先前的消息会被替换。
我知道我们有两种类型的消息:
- 可折叠的“发送同步” - 不可折叠的
那么,在不更改消息名称的情况下,如何获取两条在不同时间发送的消息?
更新1:
当我的设备离线(例如激活飞行模式)时,我尝试从我的应用程序服务器向Google服务器发送两条消息(我读到Google存储所有消息)。 但是,当我取消这种模式时,我只收到了最后一条消息。
我为不同的消息使用不同的collapse_key,并且在设备在线时收到它们(当然)。
是否有人知道如何解决这个问题?
2个回答

18

折叠键仅适用于已发送到GCM服务器但尚未到达目标设备的消息(如果有多个这样的消息具有相同的折叠键,则当设备上线时仅会向设备发送其中一个消息)。

在您的问题中,您描述了一种不同的情况 - 设备先接收第一条消息,然后接收到第二条消息并替换原始消息。这与GCM无关,而与您的应用程序处理接收到的消息的方式有关。例如,如果负责接收消息显示通知的应用程序代码,您可以决定新消息是否会覆盖现有通知或创建新通知。


感谢@Eran!是的,我知道我与此无关,因为我只是接收消息。@NickT是正确的。我对所有消息使用了相同的collapse_key。现在没问题了。 - 13KZ
1
@Eran:提供一个客户端处理此问题的代码示例。我在使用 PhoneGap 创建的应用程序中遇到了同样的问题。 - Ahmed Ahmed

7

您需要确保每条消息中的“collapse_key”字段的值是不同的。


1
谢谢@NickT。我读到了,要指定一个不可折叠的消息,我必须省略collapse_key参数。因此,GCM将单独发送每条消息。 - 13KZ
我正在使用C#开发服务器应用程序。因此,我使用了Systems.Diagnostics。我声明了一个变量(var sec),并使用了Elapsed方法(sec.Elapsed)。因此,每个消息都将具有不同的collapse_key。非常感谢!!!;-) - 13KZ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接