GCM 不适用于 Android 4.2.2?

Posted

技术标签:

【中文标题】GCM 不适用于 Android 4.2.2?【英文标题】:GCM doesn't work on Android 4.2.2? 【发布时间】:2013-05-22 18:08:48 【问题描述】:

我对 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 x 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.2.2 设备之一上。问题类似:设备能够注册 GCM,但是当服务器尝试发送推送时,服务器收到 ERROR_NOT_REGISTERED,这意味着应用程序已卸载,但事实并非如此。当我们恢复出厂设置并使用其他帐户登录时,我们无法重现此情况。 【参考方案1】:

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

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

我希望这对遇到类似问题的人有所帮助。

【讨论】:

以上是关于GCM 不适用于 Android 4.2.2?的主要内容,如果未能解决你的问题,请参考以下文章

GCM 推送通知不适用于 xamarin android

android gcm push 不适用于 json 标签通知

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

推送通知 php 代码不适用于 Android

安卓设备的 GCM 推送通知不适用于 MI 和乐视手机

安卓设备的 GCM 推送通知不适用于 MI 和乐视手机