接收Android GCM消息这么慢?

时间:2013-05-05 16:24:02

标签: android push-notification long-polling google-cloud-messaging

Google云消息传递(推送消息)问题 我有两部智能手机(HTC Sensation XE,Desire HD)和平板电脑(三星Galaxy Note 10.1 Wifi)。
有时我需要等待将近15分钟才能收到GCM推送消息。有时我会立即收到GCM推送消息(30秒内) 这是正常的吗?或者仅仅因为我在Wifi连接下? 如果这是正常的,是否还有其他服务,如“长轮询”,我可以用来从服务器检索消息? 我目前正在使用GCM + Polling(AlarmManager)从远程服务器检索消息 任何建议或更好的想法?

以下是我的测试结果:
左侧是服务器发送时间,右侧是客户端移动接收时间 所有测试结果都在Wifi连接环境下 ==========================
HD 23:10:18,23:24:XX

XE 23:11:21,23:22:44

请注意 23:10:20,23:14:54

==========================
HD 00:08:12,00:08:27

XE 00:07:55,00:07:58

请注意 00:08:04,00:13:35

==========================
HD 00:40:21,00:55:22

XE 00:39:56,00:40:14

请注意 00:40:13,00:40:59

谢谢!

3 个答案:

答案 0 :(得分:0)

GCM在过度使用时使用限制,有关详细信息,请参阅以下文档:

http://developer.android.com/google/gcm/adv.html#throttling

答案 1 :(得分:0)

请在这里阅读我的答案:

Google Cloud Messaging - messages either received instantly or with long delay

这基本上是一个tcp超时问题

答案 2 :(得分:0)

您可以通过以下代码手动触发心跳以保持连接活动。如果某个网络路由器在特定时间段(有时是5分钟)处于空闲状态,它将自动终止空闲套接字连接。每5分钟执行一次代码,以便在关闭时重新建立连接。但是,显然减少间隔将消耗更多的电池(我不知道它在多大程度上相关,因为现在智能手机出现了高mAh电池)。

getApplicationContext().sendBroadcast(new Intent("com.google.android.intent.action.GTALK_HEARTBEAT"));
getApplicationContext().sendBroadcast(new Intent("com.google.android.intent.action.MCS_HEARTBEAT"));