android - GCM : how to avoid throttling

标签 android sockets xmpp google-cloud-messaging

我的 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/

相关文章:

sockets - gRPC 套接字在具有入口的 kubernetes 上关闭

xmpp - 在 ejabberd v13.12 中支持消息存档的模块

java - android.widget.TextView.setTextAlignment() : java. lang.NoSuchMethodError

android - 使用 RxJava 注册 Google GCM

python - 如何使用 scapy 欺骗 UDP 数据包中的 IP 地址

xmpp - 使用 smack 创建 MUC

xcode - 如何强制 xcode 在特定文件上使用 ARC?

android - 旋转谷歌地图而不是 MapView

android 应用程序出现在手机的 Google Play 中,但平板电脑上没有

python - 如何在Python中的一个客户端上创建多服务器套接字?