Android C2DM的可靠性

Android C2DM的可靠性,android,push-notification,android-c2dm,Android,Push Notification,Android C2dm,我与C2DM有问题。有时效果很好,有时我的信息根本就不会被推送是否有可靠的方法来加强此连接?获取消息。我在某个地方读到,谷歌所做的就是始终保持与服务器的低带宽TCP连接。所以我认为 在网络类型之间切换时,TCP连接中断,Android尝试重新建立与C2DM服务器的连接。因此,这可能会在网络受限的WiFi上失败这是错误的假设吗? 我注意到WhatsApp有时在WiFi上无法收到消息。当我切换到3G时,我通常会在切换的那一刻得到它们从您使用C2DM的经验中,您可以提供哪些提示?C2DM不能保证您的消

我与C2DM有问题。有时效果很好,有时我的信息根本就不会被推送是否有可靠的方法来加强此连接?获取消息。我在某个地方读到,谷歌所做的就是始终保持与服务器的低带宽TCP连接。所以我认为 在网络类型之间切换时,TCP连接中断,Android尝试重新建立与C2DM服务器的连接。因此,这可能会在网络受限的WiFi上失败这是错误的假设吗?


我注意到WhatsApp有时在WiFi上无法收到消息。当我切换到3G时,我通常会在切换的那一刻得到它们从您使用C2DM的经验中,您可以提供哪些提示?

C2DM不能保证您的消息会被传递,并且您的应用程序不应该假设这样才能正常工作。因此,C2DM消息不应包含数据本身,而应包含有可用数据的通知。换句话说,C2DM消息的丢失绝不会导致应用程序丢失数据;这最多会使您花更长的时间注意到服务器上有一段数据可用

一个典型的应用程序应该每隔一段时间(很长一段时间)连接到其服务器以检索消息,即使在使用C2DM时也是如此,以覆盖C2DM消息可能无法传递的情况


根据网络配置,设备可能无法接收C2DM消息;限制性防火墙或其他奇怪的WiFi配置可能会做到这一点。

最好的方法是通过测试。我的应用程序中有一种机制,当我启用调试时,我会从客户端收到一个HTTP请求,说他们收到了消息

我发现这个数字大约是80%。幸运的是,对于我的应用范围来说,这已经足够了

Wifi不应干扰C2DM接收消息的能力。至少在手机处于活动状态时

手机待机一段时间后,android会关闭wifi。这些信息在这段时间内将不可用,原因很简单,因为没有可用的internet连接。用户唤醒手机后,应立即收到信息。

  • 对于C2DM,可靠性不是保证。所以最好有一个ACK 消息或您(发件人)意识到消息已成功接收的某种方式
  • 也要注意正确地重写onRegister类,因为设备注册ID一直在乱序
  • 最后,如果您计划定期发送更新,我更喜欢轮询C2DM,因为在可靠性和最终控制仍然无法保证的情况下,需要大量的需求才能使其正常运行
C2DM不适用于应用程序的关键部分,因为谷歌目前不提供SLA或付费层来保证可靠的服务和吞吐量

我自己也考虑过几种选择:、和

经过一些阅读和实验,我决定使用MQTT。它是IBM发明的一种非常轻量级的遥测协议,非常适合Android推送通知场景。我建议你尝试一下,这里有一篇很好的博客文章来指导你:


希望这能有所帮助。

我自己也在努力解决同样的问题。你描述的行为是准确的。我正在开发一个主要使用c2dm和Wifi连接的应用程序,我必须执行一个异步任务来定期(分钟半)调用WifiManager.reassociate()(关闭Wifi并再次打开会触发所有待处理通知的到达,这就是此解决方案的灵感所在)因此,我可以尽可能保持通知的准确性。不过,我不太确定这种做法的正确性。

经过长时间的“整个互联网”的研究,我找到了答案。正如我之前发布的,我自己也在努力解决这个问题,发现它不是C2DM问题,甚至不是实现问题。这仅仅是路由器或防火墙配置错误。Android使用一个带有心跳保持活动机制的持久TCP连接来确保连接保持正常。谷歌使用连接状态来确定你的设备是否空闲。但是如果你的路由器有一个保护策略来检查“未使用的”连接并终止它们,那就行不通了。Android通知应该立即发送(接近)。我在我的学校网络和家庭网络中测试了这一点,有两种不同的行为


要继续:请务必检查您的网络配置。

有些APN使用C2DM比其他APN工作得更好。例如,谷歌“gtalk apn”,查找有关apn对C2DM影响的论坛。

您是否每15分钟测试一次连接?我创建了一个计划任务来发送消息。我使用NotifyMyAndroid推送它。C2DM有时会在10分钟后推送消息,而不是立即推送。但是,有时你会在一秒钟左右得到它。

我只是用C2DM唤醒我的服务,否则它不会携带任何信息,但是。。。偶尔唤醒服务,以防万一,这不是个坏主意吗?这就是你的建议吗?我真正感兴趣的是。。。有没有办法说。。。“你好,C2DM,你在吗?”你可能会用这种技术杀死其他应用程序的连接。例如,您可以在浏览器中取消下载或在Google Play中取消应用程序更新。