在上一篇文章中 ,我们研究了如何在Android应用程序中设置Google Cloud Messaging(GCM) 。 我们了解到,GCM是一项免费服务,它使我们能够将来自云的消息推送到运行我们的Android应用程序并在我们的服务中注册的许多移动收件人。

推送消息可以是可折叠的,也可以是不可折叠的 。 “可折叠”表示最新消息将覆盖排队发送的所有先前消息。 可折叠消息传递的典型示例是实时游戏得分。 如果以前的分数更新尚未到达目的地,则Android客户端只会获取最新的分数。 但是,这是尽力而为的 :无法保证在GCM中发送消息的顺序,因此在某些情况下,“最新”消息实际上可能不是最新消息。

以波士顿红袜队和纽约洋基队之间的棒球比赛为例。 这是我们构造可折叠的更新以发送到在我们的运动推送通知服务中注册的设备的方式。 这里的所有代码示例都是GCM Demo应用程序的略微修改。 如前一篇文章中所述,邀请读者下载演示(客户端和服务器)并进行实验。 该演示使用用于Java的GCM帮助程序库,该库抽象了许多低级内容(例如处理JSON格式的消息)。

但是,虽然对于引入GCM非常有用,但该Demo实际上并不处理推送内容。 它只会触发并确认事件,而在所有情况下都使用相同的通知(在客户端的配置中设置)(“来自GCM:您收到消息!”)。 因此,让我们写一些实际的消息发送和接收代码:

服务器代码

// in imports
import com.google.android.gcm.server.Message;// Inside send method, construct a collapsible message
Message message = new Message.Builder().collapseKey("Fenway Park Game") // The key for all updates..timeToLive(600) // Time in seconds to keep message queued if device offline..delayWhileIdle(true) // Wait for device to become active before sending..addData("team1", "Red Sox:1").addData("team2", "Yankees:0").build();
// send in chunks of 1,000 devices
//...

值得注意的是,一次给定的GCM消息可以一次发送到多达1000个移动客户端。 如果我们的用户群大于此,则需要将消息发送过程分成1,000个收件人的块。 一种实现方法是使用java.util.concurrent.Executor线程池并异步发送块,GCM Demo服务器也是如此。

客户代码

现在,我们需要在我们的Android应用程序中处理GCM消息:

// inside GCMIntentService
@Override
protected void onMessage(Context context, Intent intent) {String message = intent.getStringExtra("collapse_key")  + "\n"+ intent.getStringExtra("team1") + " "+ intent.getStringExtra("team2");displayMessage(context, message);// notify usergenerateNotification(context, message);
}

公告一collapse_key的是如何通过服务器设置和由客户端检索。 关键是GCM如何识别给定事件的可折叠更新流。 如果有多个推送通知排队等待使用相同的折叠键 “ Fenway Park Game”发送,则只会发送最新的推送通知。

这是上面的推送通知在实际的Android设备上的样子。 最后一个屏幕是打开的GCMClient应用程序,出于演示目的,该应用程序已变成“体育中心”:

我们可以在这里看到为什么可折叠的推送是有意义的:让我们假设我们使用的是非可折叠的消息 ,并且比分在游戏过程中被更新了4次。 让我们想象一下一个常见的情况,我们的一些用户没有获得第一个通知,而在最新分数之后就可以再次访问。 然后他们将获得所有五条消息,而不仅仅是最后一条。 除最新消息外,所有消息都是无用的,我们将过度通知这些客户端。 那不是很聪明。 我们希望我们的应用程序有用,而不是烦人。 如前所述, 可折叠消息不能保证按顺序到达目的地,但它们仍使我们能够智能地使用GCM,而不必过于…琐。

参考: Google Cloud Messaging:来自Tony's Blog博客的JCG合作伙伴 Tony Sicilian的可折叠消息 。

翻译自: https://www.javacodegeeks.com/2013/09/google-cloud-messaging-collapsible-messages.html

Google Cloud Messaging:可折叠消息相关推荐

  1. 使用GCM服务(Google Cloud Messaging)实现Android消息推送

    最近在网上查了关于很多Android消息推送的资料,其中主要有四种方法. 1) 使用GCM服务(Google Cloud Messaging) 2) 使用XMPP协议(Openfire + Spark ...

  2. Google Cloud Messaging(GCM)简介与基本使用

    Google Cloud Messaging(GCM)简介与基本使用 官方文档参考:https://developers.google.com/cloud-messaging/gcm GCM简介 Go ...

  3. Google Cloud Messaging(GCM) for Android

    1.手机端需要绑定邮箱,这个关键问题是所有使用推送的用户需要绑定一个gmail的邮箱, 2. GCM ACCOUNT_MISSING error,这个错误是在绑定邮箱后才好使 3. Mismatch ...

  4. messaging_Google Cloud Messaging:可折叠消息

    messaging 在上一篇文章中 ,我们研究了如何在Android应用程序中设置Google Cloud Messaging(GCM) . 我们了解到,GCM是一项免费服务,它使我们能够将云中的消息 ...

  5. Windows Azure NotificationHub+Firebase Cloud Message 实现消息推动(付源码)

    前期项目一直用的是Windows azure NotificationHub+Google Cloud Message 实现消息推送, 但是GCM google已经不再推荐使用,慢慢就不再维护了, 现 ...

  6. Google Cloud Platform——GCP Messaging

    GCP Messaging 依赖说明:添加GCP支持条目和所有必须的依赖项,以便Google Cloud Pub/Sub集成开箱即用. GCP(Google Cloud Platform)是 Goog ...

  7. SpringBoot 2 使用 SpringIntegration 与 Google Cloud Pub/Sub 进行消息传输

    开篇词 该指南将引导你逐步使用 Spring Integration 管道适配器和 Google Cloud Pub/Sub 作为底层消息交换机制在程序的不同部分之间或不同程之间交换消息. 你将创建的 ...

  8. 创建Firebase项目并接入Firebase推送: Firebase Cloud Messaging (FCM)

    1.FCM简介: Firebase Cloud Messaging (FCM) 是一种跨平台消息传递解决方案,可供您可靠地传递消息,而且还是免费的服务.支持 Android,IOS,Web,Flutt ...

  9. 谷歌gcp 远程计算机_引导性GCP:带有Google Cloud Pub / Sub的Spring Cloud Stream

    谷歌gcp 远程计算机 我最近在Sprint Central的工程博客上阅读了Josh Long的Bootiful GCP系列 ,特别喜欢关于使用Google Cloud的Pub / Sub的第四部分 ...

最新文章

  1. struts2学习笔记--线程安全问题小结
  2. linux进程控制程序设计论文,嵌入式,linux进程控制程序设计
  3. 再谈Windows Service - 一个简单的自我例子和部署
  4. 数据派研究组招募 | 寻找最志同道合的你!
  5. 重新分区_手机DATA重新分区教程(超详细)
  6. IUnknown接口QueryInterface函数介绍
  7. 生成验证码图片的Java代码
  8. Android笔记 采用httpclient提交数据到服务器demo
  9. Linux下apache和fcgi的关系,Linux下编译安装Apache httpd 2.4
  10. Java编程:java判断两个区间交差重叠
  11. 粮食增产的重要性顺序,土水肥种
  12. 利用SPSS Modeler进行数据挖掘——探究不同程序语言的就业情况
  13. 0402 0603 0805 1206焊盘封装尺寸
  14. 入秋的第一篇数据结构算法:看看归并与快排的风采
  15. 表情符号(emoji)大全,只此一文便够了
  16. 橘子学ES19之词项搜索全文检索
  17. 2022年上半年信息系统项目管理师上午客观题参考答案及解析(四)
  18. 非洲秃鹫优化算法:求解全局优化问题的一种新的自然启发元启发式算法(Matlab代码实现)
  19. Scratch课程设计(三)
  20. 【MSSql2000】GroupByOrderBy

热门文章

  1. js去除字符串中的所有空格(包括前后,中间存在的所有空格),清除前后空格(手机输入框实用),es6新方法
  2. java中数组和集合的区别以及特性
  3. 安徽师范大学计算机与信息学院院长,罗永龙
  4. UltraEdit v18.0 破解版注册机
  5. Android 对话框相关总结
  6. vantui van-field输入框右边加单位
  7. 金蝶k3服务器老是自动重新启动,金蝶K3:常见问题分析及解决方法
  8. 如何使用12tool二维码合成器将多张二维码图片生成一张动态GIF图?
  9. 使用python解决数独问题
  10. 计算机二级刷题先EXCEL,备考篇丨迎接计算机二级考试