4

我对 GCM 有一个特殊的问题:它似乎不会向运行 Android 4.2.2 的手机发送推送。我有八部手机进行测试,范围从 2.2 到 4.2.2,而运行 4.2.2 的一部手机没有收到推送。我们将 apk 发送给了一些拥有 4.2.2 手机的联系人,他们能够确认仅在 4.2.2 手机上推送失败。总而言之,我们在超过 15 台设备上测试了我们的应用程序,其中 5 台在 4.2.2 上,只有这 5 台无法接收推送。

无法接收推送的设备有:

  • 三星Galaxy S4
  • 三星 Galaxy Nexus
  • 2 个 LG Nexus 4
  • Razor M 系列的开发手机

调查日志后,手机在 GCM 服务器上注册良好,并带有注册 ID。但是, onMessage 永远不会被触发。同样,它适用于我们所有其他未运行 4.2.2 的手机。我不确定什么会导致这种特定于 API 的行为;我的目标 API 设置为 17,我相信是 4.2。

我的另一个怀疑是,因为所有这些运行 4.2.2 的手机要么尚未上市,要么出厂未解锁,这可能与问题有关。我还无法调查这种怀疑,因为 AT&T 和 T-Mobile 尚未推出 4.2.2,而 Verizon 刚刚从昨天(5 月 21 日)开始逐步推出。但是,我真的不明白 4.2.2 库存 ROM 是如何导致 GCM 无法正常工作的。

我尝试对这个问题进行一些研究,但似乎没有人有任何问题。当我搜索 GCM 和 android 4.2.2 时,我在 SO 和谷歌上得到的只是新蓝牙堆栈的问题和更新缩短的电池寿命。我非常确信我一定做错了什么,因为其他应用程序似乎发送推送没有问题,但我不知道从哪里开始调查。如果有人能指出我正确的方向,将不胜感激。


编辑: 所以发现我无意中关闭了服务器端的日志记录,所以 GCM 实际上确实在发送时返回了一个错误。我在 4.2.2 设备上返回“未注册”错误,即使客户端上的注册过程没有引发错误,甚至返回注册 ID。同样,推送到非 Android 4.2.2 的设备也能正常工作。

4

1 回答 1

6

由于此线程中的提示,我通过将“delay_while_idle”标志设置为 false 来解决此问题:https ://groups.google.com/forum/#!topic/android-gcm/CimKwgaf2ws

在 4.2.2 中,google 更改了 GCM 以将 delay_while_idle 标志默认设置为 true,这显然会导致 push 在屏幕关闭时不发出通知声音,或者在我的情况下,导致 push 根本不起作用!

我希望这可以帮助任何有类似问题的人。

于 2013-05-26T22:51:18.033 回答