小编rot*_*egg的帖子

设备停止接收GCM推送,直到网络切换为止

我有一个依赖于GCM推送通知的Android应用程序,有时,用户的设备将停止接收推送通知.这种行为是非常间歇性的:在某些设备上,它永远不会失败并且只能继续工作数周或数月,而在其他设备上,它将工作几天,然后随机停止接收推送.

每次设备停止工作时,我都验证了设备有一个来自GCM的有效regId,并且我的服务器正在发送推送到该regId.但是,日志显示设备未接收任何内容.以下是正常推送接收的日志:

05-15 10:39:21.091: V/GCMBroadcastReceiver(13766): onReceive: com.google.android.c2dm.intent.RECEIVE
05-15 10:39:21.091: V/GCMBroadcastReceiver(13766): GCM IntentService class: com.medigram.v2.GCMIntentService
05-15 10:39:21.091: V/GCMBaseIntentService(13766): Acquiring wakelock
05-15 10:39:21.111: V/GCMBaseIntentService(13766): Intent service name: GCMIntentService-468134393228-13
05-15 10:39:21.131: V/GCMBaseIntentService(13766): Releasing wakelock
05-15 10:39:21.171: V/GCMBroadcastReceiver(13766): onReceive: com.google.android.c2dm.intent.RECEIVE
05-15 10:39:21.171: V/GCMBroadcastReceiver(13766): GCM IntentService class: com.medigram.v2.GCMIntentService
05-15 10:39:21.171: V/GCMBaseIntentService(13766): Acquiring wakelock
05-15 10:39:21.241: V/GCMBaseIntentService(13766): Intent service name: GCMIntentService-468134393228-14
05-15 10:39:21.271: V/GCMBaseIntentService(13766): Releasing wakelock
Run Code Online (Sandbox Code Playgroud)

这些都不会出现在已停止接收推送的设备上,因此,我的GCMIntentService的onMessage()方法都没有被调用.

奇怪的是,当我将设备连接从3G/4G切换到wifi或反之亦然时,它再次开始工作,设备立即获得所有积压推送.连接类型发生变化时会发生什么?

万一它有帮助,这里有一些我尝试过的设备,其中push正在努力手动重现问题,但无济于事:

- 我首先认为它可能是一个上下文问题,但当简单地切换网络解决了这个问题时,很快就被排除了.无论如何,我尝试使用"不要保持活动"开发人员选项进行进一步调查,然后对应用程序进行后台处理,但这对推送没有任何影响.

- 我已经尝试强制停止应用程序以查看是否会导致推送停止工作,但问题似乎与强制停止的应用程序没有任何关系,因为它继续工作.

- 我已经尝试将手机置于飞机模式并返回,但推动仍在继续工作.

如果有人能指出我正确的方向,我会非常感激,因为我已经耗尽了stackoverflow和google上的所有资源.当我开始时,我仍然对这个问题一无所知.

android push-notification google-cloud-messaging

8
推荐指数
1
解决办法
2151
查看次数

GCM在Android 4.2.2上不起作用?

我对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的手机要么尚未上市,要么工厂解锁,这可能与此问题有关.我还没有能够调查这种怀疑因为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上的设备工作正常.

android push-notification google-cloud-messaging

4
推荐指数
1
解决办法
6923
查看次数