google cloud messaging(GCM)机制.

参考官方文档

https://developers.google.com/cloud-messaging/gcm#arch

什么是GCM ?

gcm是google提供的一个免费推送服务,可以实现客户端和服务器之前的推送。(包括客服端推送消息到服务器或者服务器推送消息到客户端)

实现原理:


gcm的大体框架如上,包括了三部分 1,App Server 2,GCM Connection Server 3,Client App.

在使用GCM的这里涉及到几个证书的概念:

Sender ID:  在google控制台配置项目的时候创建,在App server登录GCM Connection Server的时候作为一个标记。

API Key: 在google控制台配置项目的时候创建,并且在App server端存储,必须要有这个key才能访问google service, 在Http协议中这个key被包含在头部。(注意客户端应用不要保存该key)

Application ID: 客户端应用的标示。(android app直接用包明表示)

Registration Token: 当客户端应用链接到gcm cs的时候产生。

关于消息的上发和下发,gcm机制同时支持了服务器向客户端下发消息和客户端向服务器上发消息,它们的大致流程如下:

App Server下发消息

(1)App Server发送一条消息到gcm cs.

(2)如果客户端没有在线,gcm cs以队列形式存储

(3)当客户端在线后,gcm推送消息队列的消息到客户端

(4)客户端按照平台描述接收消息

客户端向App Server向上推送

(1)客户端发送以xmpp协议一条消息到App Server

(2)如果App Server没有链接,gcm cs以队列形式存储

(3)当App Server链接,gcm cs发送消息

(4)App Server解析消息头部核实客户端

(5)发送"ack"到gcm cs确认收到消息

(6)解析消息

一条消息的成分:

目标(Target):描述消息的目的地

选项(Options):用来设置发送消息的操作选项,比如发送一条消息是否被水后

附加信息(Payload):这里有两种附加类型,一种是通知(notifaction), 另外一种是数据(data). 通知消息是由gcm处理显示,数据消息由客户端app处理。

通知:


数据:


在这里你也可以使用一种通知+数据混合的消息推送,具体如下:


这种混合的消息,接收到时候客户端app处理行为由该app是否在前台或者后台,如果是在前台那么你会直接收到通知并进行处理,如果在后台,你收到通知会被显示在通知栏上,当点击通知栏才会进行处理。

下面来讲讲消息配置时候的一些选择。

非压缩消息:非压缩消息的数据含量比压缩消息要大,一般用于及时推送的消息。

压缩消息:数据含量小,注要起到通知客户端的作用

你可能感兴趣的:(android)