我对 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 的设备也能正常工作。