GCM在Android 4.2.2上不起作用?

4
我遇到了一个有趣的GCM问题:它似乎无法将推送发送到运行Android 4.2.2的手机。我有八部测试手机,从2.2到4.2.2不等,运行4.2.2的那一部没有收到推送。我们向一些拥有4.2.2手机的联系人发送了apk文件,他们确认只有在4.2.2手机上推送失败。总的来说,我们在15台设备上测试了我们的应用程序,其中五台是4.2.2,只有这五台无法接收到推送。
无法接收推送的设备有:
- 三星Galaxy S4 - 三星Galaxy Nexus - 两台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从昨天开始逐步推出增量更新。但是我真的不明白为什么4.2.2原生ROM会导致GCM不工作。
我尝试在这个问题上做一些研究,但似乎没有人遇到任何问题。当我搜索GCM和Android 4.2.2时,在SO和谷歌上找到的都是新蓝牙堆栈和更新后的电池寿命缩短的问题。我相信其他应用程序似乎毫无问题地发送推送,所以我很确定自己一定做错了什么,但是我不知道该从哪里开始调查。如果有人能指点我,将不胜感激。
编辑:意外关闭了服务器端的日志记录,因此发现GCM实际上在发送时返回一个错误。在4.2.2设备上收到“NotRegistered”错误,尽管客户端的注册过程没有出错,甚至返回了注册ID。同样,向没有运行Android 4.2.2的设备推送完全正常。

我们也遇到了这个问题,但只在我们的4.2.2设备中的一个上出现。问题类似:设备能够注册GCM,但当服务器尝试发送推送时,服务器收到了ERROR_NOT_REGISTERED错误,这意味着应用已被卸载,但实际上并非如此。当我们进行了恢复出厂设置,并使用不同的帐户登录时,我们无法再现此问题。 - isneesh
1个回答

6

我通过将“delay_while_idle”标志设置为false来解决了这个问题,感谢此线程中的提示

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接