messaging
在上一篇文章中 ,我们研究了如何在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 user
generateNotification(context, message);
}
公告一collapse_key的是如何通过服务器设置和由客户端检索。 关键是GCM如何识别给定事件的可折叠更新流。 如果使用相同的折叠键 “ Fenway Park Game”排队等待发送多个推送通知,则只会发送最新的推送通知。
这是上面的推送通知在实际的Android设备上的样子。 最后一个屏幕是打开的GCMClient应用程序,出于演示目的,该应用程序已变成“运动中心”:
我们可以在这里看到为什么可折叠的推送有意义:让我们假设我们使用的是非可折叠的消息 ,并且比分在游戏过程中被更新了4次。 让我们想象一下一个常见的情况,我们的一些用户没有获得第一个通知,而在最新分数之后就可以再次访问。 然后他们将获得所有五条消息,而不仅仅是最后一条。 除最新消息外,所有消息都是无用的,我们将过度通知这些客户端。 那不是很聪明。 我们希望我们的应用程序有用,而不是烦人。 如前所述, 可折叠消息不能保证按顺序到达目的地,但是它们仍然使我们能够智能地使用GCM并避免过于笨拙。
翻译自: https://www.javacodegeeks.com/2013/09/google-cloud-messaging-collapsible-messages.html
messaging