Androidpn 一个实现 android 推送服务的开源项目
2012-05-16 15:15
465 查看
采用XMPP协议实现Android推送
这是现在多数人采用的方案。事实上Google官方的C2DM服务器底层也是采用XMPP协议进行的封装。
XMPP(可扩展通讯和表示协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线探测。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息。
Androidpn 是一个基于 XMPP 协议的 Java 开源 Android push notification 实现。它包含了完整的客户端和服务器端。经过源代码研究我发现,该服务器端基本是在另外一个开源工程 openfire 基础上修改实现的,不过比较郁闷的是androidpn的文档是由韩语写的,所以整个研究过程基本都是读源码。它的实现示意图如下:
Androidpn 客户端需要用到一个基于java的开源XMPP协议包 asmack,这个包同样也是基于openfire下的另外一个开源项目 smack,不过我们不需要自己编译,可以直接把androidpn客户端里面的asmack.jar拿来使用。客户端利用asmack中提供的XMPPConnection类与服务器建立持久连接,并通过该连接进行用户注册和登录认证,同样也是通过这条连接,接收服务器发送的通知。
Androidpn服务器端也是java语言实现的,基于openfire开源工程,不过它的Web部分采用的是spring框架,这一点与openfire是不同的。Androidpn服务器包含两个部分,一个是侦听在5222端口上的XMPP服务,负责与客户端的XMPPConnection类进行通信,作用是用户注册和身份认证,并发送推送通知消息。另外一部分是Web服务器,采用一个轻量级的HTTP服务器,负责接收用户的Web请求。服务器架构如下:
最上层包含四个组成部分,分别是SessionManager,Auth Manager,PresenceManager以及Notification Manager。SessionManager负责管理客户端与服务器之间的会话,Auth Manager负责客户端用户认证管理,Presence Manager负责管理客户端用户的登录状态,NotificationManager负责实现服务器向客户端推送消息功能。
服务器端界面如下,分别对应了上述的几个功能模块:
发送以后,我们可以在手机端看到接收的消息:
这个解决方案的最大优势就是简单,我们不需要象C2DM那样依赖操作系统版本,也不会担心某一天Google服务器不可用。利用XMPP协议我们还可以进一步的对协议进行扩展,实现更为完善的功能。采用这个方案,我们目前只能发送文字消息,不过对于推送来说一般足够了,因为我们不能指望通过推送得到所有的数据,一般情况下,利用推送只是告诉手机端服务器发生了某些改变,当客户端收到通知以后,应该主动到服务器获取最新的数据,这样才是推送服务的完整实现。
这是现在多数人采用的方案。事实上Google官方的C2DM服务器底层也是采用XMPP协议进行的封装。
XMPP(可扩展通讯和表示协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线探测。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息。
Androidpn 是一个基于 XMPP 协议的 Java 开源 Android push notification 实现。它包含了完整的客户端和服务器端。经过源代码研究我发现,该服务器端基本是在另外一个开源工程 openfire 基础上修改实现的,不过比较郁闷的是androidpn的文档是由韩语写的,所以整个研究过程基本都是读源码。它的实现示意图如下:
Androidpn 客户端需要用到一个基于java的开源XMPP协议包 asmack,这个包同样也是基于openfire下的另外一个开源项目 smack,不过我们不需要自己编译,可以直接把androidpn客户端里面的asmack.jar拿来使用。客户端利用asmack中提供的XMPPConnection类与服务器建立持久连接,并通过该连接进行用户注册和登录认证,同样也是通过这条连接,接收服务器发送的通知。
Androidpn服务器端也是java语言实现的,基于openfire开源工程,不过它的Web部分采用的是spring框架,这一点与openfire是不同的。Androidpn服务器包含两个部分,一个是侦听在5222端口上的XMPP服务,负责与客户端的XMPPConnection类进行通信,作用是用户注册和身份认证,并发送推送通知消息。另外一部分是Web服务器,采用一个轻量级的HTTP服务器,负责接收用户的Web请求。服务器架构如下:
最上层包含四个组成部分,分别是SessionManager,Auth Manager,PresenceManager以及Notification Manager。SessionManager负责管理客户端与服务器之间的会话,Auth Manager负责客户端用户认证管理,Presence Manager负责管理客户端用户的登录状态,NotificationManager负责实现服务器向客户端推送消息功能。
服务器端界面如下,分别对应了上述的几个功能模块:
发送以后,我们可以在手机端看到接收的消息:
这个解决方案的最大优势就是简单,我们不需要象C2DM那样依赖操作系统版本,也不会担心某一天Google服务器不可用。利用XMPP协议我们还可以进一步的对协议进行扩展,实现更为完善的功能。采用这个方案,我们目前只能发送文字消息,不过对于推送来说一般足够了,因为我们不能指望通过推送得到所有的数据,一般情况下,利用推送只是告诉手机端服务器发生了某些改变,当客户端收到通知以后,应该主动到服务器获取最新的数据,这样才是推送服务的完整实现。
相关文章推荐
- 开源项目之Android 推送框架(androidpn)
- 开源项目之Android 推送框架(androidpn)
- 实现推送服务的ASP.NET开源项目 - SignalR
- (android 开源项目android pn) android 推送服务简介
- 开源项目之Android 推送框架(androidpn)
- 这个开源项目展示了如何实现一个横跨各种Android平台的音乐播放器,包括手机,平板,汽车,手表,电视等。Google官方推出,跨平台开发必看项目。
- 使用SignalR推送服务在Android的实现 SignalA
- 移植开源项目obexftp到android平台下实现蓝牙ftp的功能
- [置顶] Android移动开发-在Android项目里集成开源框架ZXing实现扫描二维码的功能
- android-async-http开源项目的GET方式或POST方式实现登陆案例简单Demo
- Android项目笔记【项目管理统计图app】:使用github上的cardslib开源项目实现CardView(1)
- 【新建项目&使用viewPager】实现一个Android电子书阅读APP
- Android中通过ViewHelper.setTranslationY实现View移动控制(NineOldAndroids开源项目)
- 打造一个高逼格的android开源项目——小白攻略
- Android消息推送的Androidpn实现方式:androidpn
- Android推送通知的实现--PHP+ANDROID做消息推送:基于IBM的MQTT协议的Tokudu项目测试
- android 开源项目(二)可以左右拖动删除、调换位置的的listview的 item的实现(drag-sort-listview)
- 如何使用androidpn实现android手机消息推送(简单的源码分析)
- Android 多线程断点续传-开源项目xutils3实现
- 利用开源ZXing项目实现条形码和二维码扫描识别 —— Android端