我有一个依赖 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
这些都没有出现在停止接收推送的设备上,因此,我的 GCMIntentService 的 onMessage() 方法也没有被调用。
奇怪的是,当我将设备连接从 3G/4G 切换到 wifi 或反之亦然时,它又开始工作,并且设备立即获得所有积压的推送。当连接类型改变时究竟会发生什么?
如果它有帮助,以下是我在推送正在努力手动重现问题的设备上尝试过的一些事情,但无济于事:
-我最初认为这可能是一个上下文问题,但是当简单地切换网络解决了这个问题时,很快就排除了这个问题。无论如何,我尝试通过使用“不保留活动”开发人员选项然后将应用程序后台化来进一步调查,但这对推送没有影响。
- 我尝试强制停止应用程序以查看它是否会导致推送停止工作,但该问题似乎与应用程序被强制停止没有任何关系,因为它一直在工作。
- 我尝试将手机置于飞行模式并返回,但推送仍然有效。
如果有人能指出我正确的方向,我将不胜感激,因为我已经用尽了 stackoverflow 和谷歌上的所有资源。我仍然对这个问题一无所知,就像我开始时一样。