我对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个无法接受推送。
无法接收推送的设备是:
在调查日志后,手机正在向GCM服务器注册,并注册了注册ID。但是,onMessage永远不会被触发。同样,它适用于所有其他未运行4.2.2的手机。我不确定是什么会导致这种特定于API的行为;我的目标API设置为17,我相信是4.2。
我怀疑的是,因为所有运行4.2.2的手机要么尚未上市,要么工厂解锁,这可能与此问题有关。我还没有能够调查这种怀疑因为4.2.2尚未由AT& T和T-Mobile推出,而且Verizon从昨天(5月21日)开始逐步推出。但是,我真的没有看到4.2.2库存ROM如何导致GCM不起作用。
我尝试过对这个问题进行一些研究,但似乎没有人遇到任何问题。当我搜索GCM和Android 4.2.2时,所有我上SO和谷歌都是新蓝牙堆栈的问题和更新时缩短的电池寿命。我相信我一定做错了,因为其他应用程序似乎发送没有问题,但我不知道从哪里开始调查。如果有人能指出我正确的方向,那将非常感激。
修改 因此发现我已经意外关闭了服务器端的日志记录,因此GCM确实在发送时返回错误。我在4.2.2设备上收到了“NotRegistered”错误,即使客户端上的注册过程没有引发错误甚至返回注册ID。再一次,推送到不在Android 4.2.2上的设备工作正常。
答案 0 :(得分: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完全不起作用!
我希望这有助于任何有类似问题的人。