一、基础

       要使客户端获取不定时的信息一般有两种方式:第一种是客户端使用Pull(拉)的方式,隔一段时间就去服务器上获取信息,看是否有更新的信息出现。第二种就是服务器使用Push(推送)的方式,当服务器端有新信息了,则把最新的信息Push到客户端上。

       虽然Pull和Push两种方式都能实现获取服务器端更新信息的功能,但是明显来说Push is better than pull。因为Pull方式更费客户端的网络流量,更主要的是费电量。



Android从2.2版本开始增加了Cloud to Device Messaging(C2DM)框架,在系统中支持了Push功能,基于Android平台使用Push功能更加简单了。虽然C2DM目前还处在实验室阶段,不过小规模的使用应该没问题

      (1)pull与push基础详解:

参考:http://www.blogjava.net/cheneyfree/archive/2008/12/08/245110.html

所谓PUSH技术是一种基于客户服务器机制,由服务器主动的将信息发往客户端的技术。同传统的拉技术(PULL)相比,两者最为主要的区别在于前者的是由服务器主动发送信息,而后者则是由客户机主动请求信息。在PUSH应用中,在服务器发送内容给客户机之前,没有明显的客户机请求,也就是说,PUSH事务是由服务器发起的。PUSH技术的本质在于让信息去主动的寻找用户,因此其优势在于信息的主动性和及时性,通过使用该技术,可以尽快的将信息推送到用户面前;其弱势在于信息的准确性较差,由于简单的筛选机制取代了人工的选择,必然会使推送信息和用户的需求间存在一定的差异。

        下面我们就来体验一下Android的C2DM功能。

二.C2DM框架

C2DM) 作为 Android 2.2 的一部分已经发布了。

        使用Android的C2DM功能有几个要求:

        1. 需要Android2.2及以上的系统版本。

        2. 使用C2DM功能的Android设备上需要设置好Google的账户。

        3. 需要在这里注册使用C2DM功能的用户邮箱账号(最好为C2DM单独注册一个Gmail邮箱账号)。

        我们接下来C2DM的一个完整过程,这里借用一下Google官方推出的Chrome To Phone过程图来说明下。

android 怎么查找crash原因 android crush_android

图1 C2DM操作过程图

要使用C2DM来进行Push操作,基本上要使用以下6个步骤:

         (1)注册:Android设备把使用C2DM功能的用户账户(比如android.c2dm.demo@gmail.com)和App名称发送给C2DM服务器。

         (2)C2DM服务器会返回一个registration_id值给Android设备,设备需要保存这个registration_id值。

         (3)Android设备把获得的registration_id和C2DM功能的用户账户(android.c2dm.demo@gmail.com)发送给自己的服务器,不过一般用户账户信息因为和服务器确定好的,所以不必发送。

这样Android设备就完成了C2DM功能的注册过程,接下来就可以接收C2DM服务器Push过来的消息了。

         (4)服务器获得数据。这里图中的例子Chrome To Phone,服务器接收到Chrome浏览器发送的数据。数据也可以是服务器本地产生的。这里的服务器是Google AppEngine(很好的一项服务,可惜在国内被屏了),要换成自己的服务器。服务器还要获取注册使用C2DM功能的用户账户(android.c2dm.demo@gmail.com)的ClientLogin权限Auth。

         (5)服务器把要发送的数据和registration_id一起,并且头部带上获取的Auth,使用POST的方式发送给C2DM服务器。

         (6)C2DM服务器会以Push的方式把数据发送给对应的Android设备,Android设备只要在程序中按之前和服务器商量好的格式从对应的key中获取数据即可。

         这样我们就大概明白了C2DM的工作流程,下面我们就结合一个实例来具体的说明以上6个步骤。

三、实例开发