我的 Android 系统需要向平板电脑应用程序发送频繁更新(信息亭始终连接到 wifi 和电源插头)。
GCM-HTTP (//developer.android.com/google/gcm/http.html) 工作正常,但在某些情况下,单个设备可能会收到许多通知,从而触发此处描述的众所周知的节流问题 (//developer. 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?
- 按照 (//thinkandroid.wordpress.com/2010/03/27/incorporating-socket-programming-into-your-applications/) 中的说明实现基本套接字连接?在这种情况下,我必须考虑连接暂时丢失的可能性吗?
解决方案: 我找到了我的问题的解决方案,即 XMPP 协议(protocol)。一开始我在平板应用中实现了aSmack,并配置了一个在本地运行的eJabberd服务器。实现非常简单。 几周后,我收到了一封来自 Google 的关于 GCM-XMPP 的邮件,它可以更快地嵌入到应用程序中并且运行得非常好!
最佳答案
也许将 time_to_live 设置为 0。
来自 http://developer.android.com/google/gcm/adv.html :
“为消息指定到期日期的另一个优点是,GCM 永远不会限制 time_to_live 值为 0 秒的消息。换句话说,GCM 将保证最大努力处理必须“现在或永远不会”传递。请记住,time_to_live 值为 0 意味着无法立即传递的消息将被丢弃。但是,由于此类消息永远不会被存储,因此这为发送通知提供了最佳延迟。”
关于android - GCM : how to avoid throttling,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20325898/