Google Cloud Messaging:可折叠消息

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

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

gcm-collapsible1

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

gcm-push1

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值