安卓GCM消息接收太慢了

10

我在我的应用程序中使用GCM,但是遇到了一个问题。

大多数时候,我能够立即收到消息,但是有时消息会在五分钟后一次性到来,就好像它们被卡住了一样。这是正常的吗?


1
同样的问题。很不幸地遇到了相同的问题 :( - the_new_mr
3个回答

8

客户端手机上的GCM框架部分使用5228端口上的TCP连接。此连接用于推送通知,但像每个tcp连接一样,它可能会因某些路由器/运营商施加的严格策略而超时(TCP空闲超时)。

例如,大多数WiFi路由器在5分钟后杀死不活动的连接,就像我的一样。

GCM框架使用keep-alive机制,在WiFi上每15分钟发送一个心跳网络数据包,在3G上每28分钟发送一个。但这种keep-alive并不总是适用于所有用户。

我在这里向Google提出了问题: https://productforums.google.com/forum/#!category-topic/nexus/connecting-to-networks-and-devices/fslYqYrULto 他们承认当前存在问题。


6

我目前的测试非常有限,还没有注意到这一点,但根据文档的理解,这并不令人惊讶:

GCM通常会在消息发送后立即传递。但是,这可能并非总是可能的。例如,设备可能已关闭、离线或无法使用。在其他情况下,发送方本身可能会要求在使用delay_while_idle标志时不传递消息,直到设备变为活动状态。最后,GCM可能会有意延迟消息,以防止应用程序消耗过多资源并对电池寿命产生负面影响。

通过这个和文档中其他部分的语言,你所描述的听起来正是我所期望的。没有立即传递的保证;通常情况下,您会立即收到消息,但有时候不会。


6
我正在开发一个应用程序,及时交付信息对其至关重要。目前我的经验是GCM通常需要2-3秒钟,但有时可能需要5-10秒钟甚至1-2分钟才能交付。据我所知,应用程序开发者无法做任何事情来缩短交付时间或使其更加稳定,但如果有任何方法,我肯定会很想知道! - gcl1
2
现在是2014年6月,我仍然面临着这个问题。 - MeetM

0

我正在寻找与原帖作者相同的东西。它似乎需要多达5分钟才能“唤醒”,然后非常快地处理消息。

我的应用程序正在处理与聋人的对话中的文本项。呼叫者启动对话,而聋人通过电话回复。延迟仅发生在第一步中,“突如其来”的新消息。一旦完成了该(应用程序、设备、系统ID)的第一个消息,其他消息就非常快,几乎瞬间到达。


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