实现意图如下图所示:
文章插图
图3 实现意图
客户端需要用到一个基于java的开源XMPP协议包,这个包同样也是基于下的另外一个开源项目smack,不过我们不需要自己编译,可以直接把客户端里面的.jar拿来使用 。客户端利用中提供的类与服 务器建立持久连接,并通过该连接进行用户注册和登录认证,同样也是通过这条连接,接收服务器发送的通知 。
服务器端也是java语言实现的,基于开源工程,不过它的Web部分采用的是框架,这一点与 是不同的 。服务器包含两个部分,一个是侦听在5222端口上的XMPP服务,负责与客户端的 类进行通信,作用是用户注册和身份认证,并发送推送通知消息 。另外一部分是Web服务器,采用一个轻量级的HTTP服务器, 负责接收用户的Web请求 。服务器架构如下:
文章插图
图4示意图
最上层包含四个组成部分,分别是,Auth ,以及。负责管理客户端与服务器之间的会话,Auth 负责客户端用户认证管理, 负责管理客户端用户的登录状态,负责实现服务器向客户端推送消息功能 。
这个解决方案的最大优势就是简单,我们不需要象C2DM那样依赖操作系统版本,也不会担心某一天服务器不可用 。利用XMPP协议我们还可以进一步的对协议进行扩展,实现更为完善的功能 。采用这个方案,我们目前只能发送文字消息,不过对于推送来说一般足够了,因为我们不能指望通过推送得到所有的数据,一般情况下,利用推送只是告诉手机端服务器发生了某些改变,当客户端收到通知以后,应该主动到服务器获取最新的数据,这样才是推送服务的完整实现 。XMPP协议书相对来说还是比较简单的,值得我们进一步研究 。
但是在经过一段时间的测试,我发现关于也存在一些不足之处:
1. 比如时间过长时,就再也收不到推送的信息了 。
2. 性能上也不够稳定 。
3. 如果将消息从服务器上推送出去,就不再管理了,不管消息是否成功到达客户端手机上 。
4.方案四:使用第三方推送服务
通过嵌入SDK使用第三方提供的推送服务,目前主流的有百度云推送,极光推送,个推,,聚能推等 。
优点:稳定,成熟,节省开发和探索时间,相对自己开发成本低,推送管理界面及统计程序完善 。
缺点:有程序嵌入顾虑 。
其中的极光推送的推送原理参阅:附件一 。
5.方案五:自己搭建一个推送平台
这不是一件轻松的工作,当然可以根据各自的需要采取合适的方案 。
参考代码(客户端、服务端):附件二 。
附件一:
极光推送技术原理:移动无线网络长连接
移动互联网应用现状
因为手机平台本身、电量、网络流量的限制,移动互联网应用在设计上跟传统PC上的应用很大不一样,需要根据手机本身的特点,尽量的节省电量和流量,同时又要尽可能的保证数据能及时到达客户端 。
为了解决数据同步的问题,在手机平台上,常用的方法有2种 。一种是定时去服务器上查询数据,也叫,还有一种手机跟服务器之间维护一个TCP长连接,当服务器有数据时,实时推送到客户端,也就是我们说的Push 。
从耗费的电量、流量和数据送达的及时性来说,Push都会有明显的优势,但Push的实现和维护成本相对较高 。在移动无线网络下维护长连接,相对也有一些技术上的难度 。本文试图给大家介绍一下我们极光推送在平台上是如何维护长连接 。
- Android第二单元总结
- s Android中的WebView中加载非Http的URL导致net::ER
- 一 Android——数据存储(二十一)
- 密码学技术总结
- Android进阶——Sharedpreferences保存对象和图片等复杂类型
- Python利用exifread库获取图片的经纬度,拍摄时间,拍摄地点等信息
- 裁员潮来袭:Android开发如何自救?未来三年,趁早做好这3个准备
- WebService之获取手机号码信息
- 三 Android 程序开发——百度地图的使用 地图定位(定位+跟随+距离测量
- android基于虹软的人脸识别+测温+道闸项目实现