当设备连接互联网时,我无法收到旧消息-GCM

Posted

技术标签:

【中文标题】当设备连接互联网时,我无法收到旧消息-GCM【英文标题】:When device is connected internet, I can't get old messages- GCM 【发布时间】:2012-08-27 08:29:04 【问题描述】:

虽然我的设备没有互联网连接,但我正在使用 GCM 从服务器向应用程序发送消息。之后,当设备连接互联网时,我无法收到消息。正常吗?

来自http://developer.android.com/guide/google/gcm/adv.html

"如果设备未连接到 GCM,则消息将被存储,直到建立连接(再次遵守折叠密钥规则)。 "

我的消息具有相同的折叠键;但是当设备连接时,我仍然只需要收到一条消息。

【问题讨论】:

相同的折叠键意味着您将只收到 1 条消息:if there is already a message with the same collapse key (and registration ID) stored and waiting for delivery, the old message will be discarded and the new message will take its place (that is, the old message will be collapsed by the new one) @Selvin 我无法收到此消息,我已经在未连接时仅从服务器向应用程序发送了一条消息。 sry 朋友,这是 google 告诉我的,我还没有将任何 c2dm 迁移到 GCM,所以对此不太确定——请检查网络连接何时恢复 google play 已登录 【参考方案1】:

您可以将所有消息发送到您的设备。

GCM 服务器会记录您发送到您设备的所有消息。每当设备连接到互联网时,它就会在通知区域显示这些内容。

您只收到一条消息,因为您在代码的 notify() 函数中分配了相同的 NOTIFICATION ID

你的代码可能使用这个:

        // 0 is notification id
        notificationManager.notify(0, notification); 

每次更改您的通知 ID 以获取通知区域中的所有消息。

如:

        static int NOTIFICATION_ID = 0;

        if (NOTIFICATION_ID > 1073741824) 
            NOTIFICATION_ID = 0;
        
        notificationManager.notify(NOTIFICATION_ID++, notification);

if 子句使您免受 int 值溢出的影响。你可以根据你的要求忽略它。

我已经测试过这个场景。现在轮到你了。 乐于助人!!

【讨论】:

我可以知道为什么这个限制“1073741824”,仅仅是因为整数限制还是这背后的任何特定原因 如果您的大量消息用完,这只是整数限制。您可以根据您的应用程序上下文删除它。

以上是关于当设备连接互联网时,我无法收到旧消息-GCM的主要内容,如果未能解决你的问题,请参考以下文章

当 3G 网络可用时,Android GCM 不适用于 wifi 网络

Android GCM 不向设备发送通知消息

设备未收到 GCM 消息

GCM 在服务器上多次收到相同的消息

为啥我无法在 Android 设备上接收来自 GCM 的消息

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