设备未收到 GCM 消息

Posted

技术标签:

【中文标题】设备未收到 GCM 消息【英文标题】:Device Not Receiving GCM Messages 【发布时间】:2015-02-10 22:48:00 【问题描述】:

首先,我目前无法发布代码信息/示例,因为我目前不在拥有代码的机器旁。如有必要,我会在明天到达那台机器时获取相应的代码片段。

设置

根据 Google 的示例代码,我正在实现与本地服务器的 GCM 通信。客户端和服务器都是对示例的轻微修改。服务器是一个 Java 程序(同样,几乎完全是从演示代码中提取的)。

问题

目前,应用程序和服务器使用虚拟“echo”设置来回正常通信,该设置是 Google GCM 通信示例代码的初始设置。

如果我转到我打算与 GCM 一起使用的自定义消息内容,我就会遇到问题。我可以发送从 GCM 驱动的应用程序中找到的消息,但由于某种原因,我没有将消息从服​​务器返回到应用程序。

目前,我正在测试通过 GCM 与 XMPP 服务器对话的应用程序的基本聊天元素。因此,我可以使用 Pidgin 连接到 XMPP 服务器并查看从应用程序发出的消息,当我发送回消息时,它们会被发送到 GCM 服务,但永远不会通过应用程序发出。

困惑/问题/澄清

我很困惑,因为演示行为运行良好 (消息回显到应用程序)。 我发送到正确的注册 ID,我可以在演示行为和我的行为之间来回切换多次,它会/不会相应地工作。 我在返回应用程序的任何消息中都没有 collapse_key 或 time_to_live,并且 delay_while_idle 明确设置为 false(未省略)。所以不应该有超快的过早超时或类似的东西(除非我误解了这些键的行为) 据我了解,数据字段中没有“必填”键,这不正确吗?如果是这样,我将非常感谢任何有关数据字段中所需键的适当文档的链接。 我无法想象会出现权限错误,因为它适用于演示功能。

目前,我从服务器发送回 GCM 应用程序的消息具有以下字段,据我了解,其中只有三个是必需的(除了 delay_while_idle 之外的所有内容?):

到(是的,正确的密钥在这里) delay_while_idle(设置为 false) 数据(数据的JSON字符串) message_id(示例代码模式中自动生成的消息 ID,本质上是一个随机 UUID)

非常感谢任何帮助。如果您觉得某些代码片段很重要,请告诉我您想看什么。

【问题讨论】:

我尚未阅读您的整个问题,但请确保您没有直接从 IDE 运行应用程序。它以这种方式使用临时证书。所以导出,签署一个新的 apk,把它放到你的设备中,然后安装它。 您的应用服务器是否收到任何nack 错误代码? 我从 IDE 启动应用程序,但在物理设备上运行它,而不是在模拟设备上。这是一个问题吗? @Koh 我会测试并回复你。 【参考方案1】:

好的,所以我的原始帖子中没有此信息,但今天早上经过更多调试后,我发现了问题。

在我的自定义消息的包装中,沿着路径 Server->GCM->Device 发送,我错误地放入了“data”的键/值对:“JSON Dictionary”而不是 "data": JSON Dictionary,并且缺少由 GCM 服务发回的指示 JSON 格式错误的错误。

对于任何对此感到困惑的人,GCM 消息中“数据”键的值必须是字典,而不是字典的字符串形式(我的无意错误,自动驾驶手指失败)。

【讨论】:

以上是关于设备未收到 GCM 消息的主要内容,如果未能解决你的问题,请参考以下文章

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

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

对于某些 android 设备,GCM 消息在 GCM 服务器上停留在“已接受”状态

未收到 GCM 消息

使用亚马逊 sns 未收到 GCM 推送

未收到来自 Android GCM 的消息