Android 推送机制详解
1、android平台的推送方式
1.1android pull推送方式
Pull方式方式,顾名思义,就是拉。
这种方式就是客户端从服务器端拉取数据(Data)下来,具体是如何拉的呢?
客户端会和服务器端建立一个网络连接,然后用这个链接,去轮询服务器的消息接口。
如果有消息过来就会被客户端获取到。
缺点:
耗电,因为要通过建立网络连接,设置频率去轮询,要消耗一定时间的CPU运行时间,比较消耗电量和网络流量。
优点:
编程方便(其实也不是方便的啦,哈哈)
1.2 android push推送方式
Push的方式有好几种。
第一种,push(message)通过第三方短信平台给要推送的客户端发送短信的方式来实现推送。
具体通过如下步骤:
第三方平台发送短信到目标手机;
目标手机接收到短信,解析短息的意图;
目标手机发送网络请求到服务器端请求推送数据(Data)。
缺点:
短信平台比较费钱。
优点:
省点。
第二种,push长连接方式。
如何维持android 客户端和服务器端的长连接?
设置网络请求的心跳链接,用AlarmManager来实现心跳链接,设置一个链接的频繁度。
当服务器给客户端发消息时,或者客户端和服务器的这个链接timeout时,长连接就回断掉,所以我们需要用心跳链接,来重新建立长连接。
注意,在建立连接的时候需要发送长度为0的数据来保持连接,不然NAT映射表会失效。
*我们知道我们移动端要和Internet进行通信,必须通过运营商的网关,所以,为了不让NAT映射表失效,我们需要定时向Internet发送数据,因为只是为了不然NAT映射表失效,所以只需发送长度为0的数据即可。
第三种,用C2DM,google提供的云端推送服务,不过你懂的,在国内用不了哦。哈哈
C2DM原理图:
主要通过如下几个步骤:
1、客户端发送 userAccout 信息,账户信息到云端。
2、然后云端返回一个注册的ID(Registration ID),
3、然后根据这个注册ID(Registration ID)和user account信息发送到自己的服务器上,
4、服务器发送registration ID+Data 给云端服务器,
5、云端服务器发送data给目标机。
第四种,push(XMPP)方式推送。
科普,XMPP是一种轻量级的基于XML可拓展标记语言,实际上就是TCP协议的XML流。
XMPP推送过程图解:
主要步骤如下:
1、客户端发送用户数据(目标机的IMIE,版本等等信息)给服务器端。
2、服务器端认证用户目标机。
3、认证通过,服务器和客户端建立session会话。
4、服务器端发送推送消息给客户端。
XMPP服务器端架构图:
解释下最顶上的四个Manager:
Session Manager 是管理会话的。
Auth Manager是管理认证的。
Presence Manager是管理用户登录状态的
Notification Manager是管理推送消息的。
附:android pn项目开源源码主页:
服务器端和客户端都是java语言的哦。哈哈。
http://sourceforge.net/projects/androidpn/