GCM:如何避免节流

时间:2013-12-02 10:22:50

标签: android sockets xmpp google-cloud-messaging

我的Android系统需要经常更新平板电脑的应用程序(一个信息亭始终连接到wifi和电源插头)。
GCM-HTTP(//developer.android.com/google/gcm/http.html)工作正常,但在某些情况下,单个设备可能会收到许多通知,从而触发此处所述的众所周知的限制问题(//开发人员。 android.com/google/gcm/adv.html#throttling)。这是一个问题,因为通知中的有效负载对系统非常重要。 什么是防止这种情况的最佳解决方案?

  • 在服务器中实施一项服务,该服务将通知分组到同一设备并以有限的频率进行拍摄。
  • 使用XMPP服务。我想使用GCM-XMPP(//developer.android.com/google/gcm/ccs.html),但您需要在白名单中签名,所以我认为每个人都不能使用它。作为替代方案,我应该按照此处的建议(Android and XMPP: Currently available solutions)和此处(Better Way to implement the chat application using XMPP on Android?)使用aSmack或Quickblox吗?
  • 实现基本套接字连接,如(http://thinkandroid.wordpress.com/2010/03/27/incorporating-socket-programming-into-your-applications/)中所述?在这种情况下,我必须考虑到连接暂时丢失的可能性?

解: 我找到了我的问题的解决方案,即XMPP协议。最初,我在平板电脑应用程序中实现了一个Smack,并配置了一个在本地运行的eJabberd服务器。实施非常简单。 几周之后,我收到了谷歌发送给GCM-XMPP的邮件,这个版本甚至可以更快地嵌入应用程序并且工作得非常好!

1 个答案:

答案 0 :(得分:3)

可能将time_to_live设置为0.

来自http://developer.android.com/google/gcm/adv.html

“为消息指定过期日期的另一个好处是 GCM永远不会限制time_to_live值为0秒的消息。换句话说,GCM将保证必须为消息尽最大努力“现在或永远”。“请记住,time_to_live值为0意味着无法立即传递的消息将被丢弃。但是,由于此类消息从未存储过,因此这为发送通知提供了最佳延迟。” p>