GCM Architectural Overview 1
Posted on Fri 31 August 2012 in it
更详细的信息见android developer原文。
Google Cloud Messaging for Android (GCM)是一个免费的服务,帮助开发者从服务器端发送数据到运行在Android设备上的应用程序。这个服务提供了一个轻量级的消息告知机制,用来告诉Android上的程序去服务器端拿新数据(例如一个朋友上传了一个片子),也可以是一条最大不超过4kb的数据(这样应用就能接到即时消息了)。GCM服务处理队列中的所有消息,把它们发送到目标机器上运行的指定程序。 想立马在Android应用中使用GCM,请看Getting Started介绍。
简介:GCM的主要特点
- 允许第三方应用从服务器发送消息到设备上的应用;
- GCM不保证消息的送到及送达的顺序;
- 客户端不需要一直运行来接收消息。当消息送达时系统会通过Intent broadcast来唤醒程序,当然程序需要设置好broadcast receiver和permissions。
- 不提供任何内建用户界面或处理器,GCM仅把收到的原始消息传递给程序,由客户端程序全权处理。
- GCM需要设备运行在Android2.2及以上版本,并且安装有Google Play Store应用;或者是运行Android2.2,具有Google APIs的虚拟机。对于程序部署方面,不要求必须通过Google Play Store安装的应用。
- GCM使用一个现有的连接访问谷歌服务。对3.0之前的设备,要求用户设置好谷歌账户,Android 4.0.4及更高版本对谷歌帐户不做要求。
架构概览
这一节介绍GCM的工作概况。
GCM中有两类关键的术语和概念: Components:GCM中的物理实体; Credentials:IDs和tokens,用来确保各阶段里各方的合法性,以确保消息正确送达。
Components | |
---|---|
Mobile Device | 移动设备要求Android版本2.2及以上,且必须安装Google Play Store;如果Android版本低于4.0.4,则必须至少有一个已经登录的谷歌账户,测试时,可以运行带Google APIs的Android 2.2以上版本的虚拟机。 |
3rd-party Application Server | An application server that developers set up as part of implementing GCM in their applications. The 3rd-party application server sends data to an Android application on the device via the GCM server. 一个应用程序服务器,作为实现GCM的一部分。第三方程序服务端通过向GCM服务器发送消息来通知客户端。 |
GCM Servers | Google的服务器,从第三方程序服务器收消息,然后发到目标手机上的目标程序 |
Credentials | |
Sender ID | 如Getting Started所述,Sender ID是从API console获得的project ID,用来在registration process中标识允许向设备上发送消息的Android应用程序 |
Application ID | Android客户端应用需要注册以接收消息,应用通过package name在manifest中进行标识。这确保了消息传递给正确的应用。 |
Registration ID | 这个ID是由GCM servers发出的用来标识允许接收消息的客户端应用,一旦客户端应用获得了registration ID就把它发给第三方服务器,而第三方服务器记录此ID来标识接收消息的客户端。简而言之,一个registration ID绑定了一个运行在特定终端上的特定应用。 |
Google User Account | 对于运行在低于Android 4.0.4版本的设备来说,要想GCM生效,设备上必须至少包含一个Google account。 |
Sender Auth Token | 存储在第三方服务器上的API key,用来授权访问Google服务。这个key放在post请求的头信息中。 |
生命周期
云到端的主要过程包括: 1. Enabling GCM 客户端注册接收消息; 2. Sending a message 第三方程序服务器向设备发送消息; 3. Receiving a message Android程序从GCM服务器上接收消息
to be continued... Minocycline