首页 > 技巧 > Android Cloud to Device Messaging 服务介绍 – 如何从云端推送消息到手机

Android Cloud to Device Messaging 服务介绍 – 如何从云端推送消息到手机

2010年8月19日

译者前言:

基于 Android 的手机是面向移动互联网的手机,保持24小时在线才能充分发挥它的全部能量。而 Google 也在不断提供各式各样的网络服务来吸引用户,有的服务是直接面向终端用户,而有的服务是面向开发者,期望开发者可以利用 Google 提供的这些服务来制作新形态的 Apps 和创造新的服务类型,当然 Google 也会从自家的服务被更多用户访问来获得收益。

Google I/O 2010 介绍了 Android 2.2 导入的 Android Cloud to Device Messaging (C2DM) 服务,也演示了在PC端,把浏览器正在浏览的网址或者在 Google Maps 上定位的位置发到 Android 手机上,而手机会直接通过浏览器打开该网址或者通过地图软件定位该位置。

前不久 Chrome to Phone 已经正式发布,可以让 Android 用户在自家的 PC 和 手机上亲自使用该功能。而 Chrome to Phone 的作者 也发表了一篇技术文章,介绍了C2DM 服务的一些细节。

Dave Burke

Dave Burke

翻译正文:

Android Cloud to Device Messaging (C2DM) 作为 Android 2.2 的一部分已经发布了。C2DM 允许第三方开发者开发相关的应用来推送少量数据消息到用户的手机上。C2DM 创造了一个良好的机会,允许我们使用多种 Google 开发工具来创建一种简单但相当实用的应用类型。用户可以使用该类型的应用把各种各样的信息从他们的台机或者笔电直接 push 到自家的手机上。来自 Google 20% 工作时间的一个实验性项目 Chrome to Phone 演示了这种类型的应用。

Chrome to Phone 包括了一个 Chrome Extension,一个 Android Application,和一个 Google AppEngine 服务器。所有的代码都是开源的,可供其它开发者参考如何使用 C2DM。

Chrome to Phone 的消息流是一个很典型的推送服务:

用户使用 Android App 在 C2DM 服务器上注册,获得一个设备注册 ID,这个 ID 跟用户的 Google 帐号绑定在一起,并且由 AppEngine server 来维护。 AppEngine server 在验证用户账号的合法性后记录下用户账号跟用户 C2DM 设备注册 ID 之间的映射关系。

Chrome Extension 获得浏览器当前访问的网址和标题后,把它们发送到 AppEngine server。 AppEngine server 验证当前登录的 Google 用户账号后,通过该账号查找到对应的 C2DM 设备注册 ID。然后通过 HTTP 把 URL 和标题发送到 Google 的C2DM 服务器。用户手机上的Android 系统(2.2 以上版本)会一直监听来自 C2DM 服务器的推送消息,当 C2DM 服务器接收到 AppEngine server 发送过来的消息,并且这个消息是发送到用户手机所绑定的 C2DM 设备注册ID 时,就会发送给用户手机,而手机上 Android 系统收到消息后则会发起一个 Intent broadcast(意图广播),接着跟该 Intent 对应的 Android App 被激活,再把这个 Intent 转换成相应的新 Intent 并路由到其它 Apps 上面去(比如浏览器,拨号软件,地图软件等)。

(路由路径:”Chrome to Phone” Chrome Extension(PC)-> “Chrome to Phone” AppEngine server -> C2DM server -> Android OS(Mobile) -> “Chrome to Phone” Android App -> Android Browser)

"Chrome to Phone" Chrome Extension

"Chrome to Phone" Chrome Extension

这里一个有趣的设计是像 URL 和标题这样轻量级的数据会附随在推送消息上,直接从 C2DM 服务器发送到手机上。URL 会使用hash编码产生一个 collapse_key 来防止重复发送。另外一个可选的方式是(也更适用于数据量较大的情况),服务器只发送简单的推送消息来激活手机上的 App,然后 App 再访问服务器获得额外的数据。

Chrome to Phone 的代码可以在网上找到。 AppEngine 和 Android App 代码都包括了一个可重用的包 com.google.android.c2dm 用于处理底层的 C2DM 交互事务 (例如配置,任务队列管理等)。

Chrome to Phone 提供了有用的功能,不过它最有趣的地方是在于提供了如何使用 Android C2DM 服务的示例。

译后语:
Google 的 Android C2DM 服务能够像 LBS 一样催生出一系列新的应用类型吗?利用从云端的服务器往手机推送消息的功能,让手机跟网络上的其它机器,包括服务器,用户自己的PC等更紧密的联系在一起,的确提供了一个智能设备跟移动互联网之间如何无缝衔接的一个范例。

读者您是怎样看待 Android C2DM 这样的服务呢?欢迎留言。

Via Android Developers

本站文章除注明转载外,均为本站原创编译
转载请注明:文章转载自:谷安——谷奥Android专题站 [http://android.guao.hk]
本文标题:Android Cloud to Device Messaging 服务介绍 – 如何从云端推送消息到手机
本文地址:http://android.guao.hk/posts/android-cloud-to-device-messaging.html
本文短网址:http://guao.cc/mOv
  1. vsking
    2010年10月18日17:26 | #1

    目前在调C2DM程序,主要问题还是authToken,要推送消息最终还是需要向C2DM服务器发送消息请求,这个请求中就包含了一个authToken的参数,但是这个token是如何获得的呢?是之前在网上注册的具有C2DM发送消息权限的gmail账号吧。但是又如何去获取该账号的token呢?

  2. 2010年8月24日09:56 | #2

    @android:

    呵,对终端用户而言,使用上应该是满简单的,不过Google的服务,因为GFW认证的关系,在国内都很难访问。

  3. 2010年8月23日19:56 | #3

    @vsking:

    负责往手机推送消息的是C2DM服务器。

  4. vsking
    2010年8月21日14:40 | #4

    appengine是否已经包括了接受app的regist和负责往手机推送消息的功能?还是依赖了其他的服务?

  5. kanashimi
    2010年8月20日11:52 | #5

    chrome to phone手机客户端第一次登陆要用VPN翻墙,选择自动连接(之后就不用了),在电脑上推送网址要开着VPN才能成功向手机推送。

  6. 2010年8月19日21:38 | #6

    看起来都好复杂,会流行开来吗?

  7. gancuimian
    2010年8月19日12:54 | #7

    不好使啊~~chrome to phone手机上不能登录,疑似被墙~之前用firefox的sendtophone,手机上的插件可以登录,一开始都好,但是后来推送不了,每次按firefox上的sendtophone都显示它没有发送。。。。意疑似被墙,不过貌似用了vpn也不好使

  1. 2010年8月19日13:44 | #1
  2. 2010年8月20日13:51 | #2

您可以直接点击别人评论右侧的回复,这样您的回复评论将同时发到原作者信箱