由于目前的web项目中要用到android手机消息推送,尝试过很多中方式之后发现,利用androidpn的部分代码来实现这个功能是比较方便的。经过使用tsung进行简单的压力测试,证明这个框架能够满足大多数简单应用的需求。
Androidpn包含有server和client两个包,server部分可以作为服务器单独运行,也可以嵌入到web项目的servlet中,在tomcat环境中与web项目的其他部分交互。androidpn的简单用法网上已经有很多文章介绍,这里就不细说了。主要谈谈如何将androidpn和自己的web程序整合到一起。
Server部分的主要包结构如下:
其中org.androidpn.server.dao,org.androidpn.server.model和org.androidpn.server.service为使用hibernate链接数据库并实现简单的用户登录认证,开发中可以用我们自己的认证模块替换。剩下的包就是推送的主体实现。
接下来逐个包来看:
1.util包中的类用来加载resources中的配置文件,在配置文件中可指定监听端口和ssl证书目录等属性。
2.org.androidpn.server.xmpp包里面定义了一些异常类型,主要是包含有入口类XmppServer,这个类用来启动和停止server程序。
3.org.androidpn.server.xmpp.auth包里面是认证的一些类,我们自己的认证模块可以在这里与androidpn进行结合。
4.org.androidpn.server.xmpp.codec是XMPP协议的XML文件解析包,server收到和发送的消息都要通过这个包来进行xmpp协议编码和解码。
5.org.androidpn.server.xmpp.handler包主要是对消息的处理,我们可以针对不同的消息类型定义自己的handler,
6.org.androidpn.server.xmpp.net包负责维护与client之间的持久连接,并实现了一些传输方式供发送xmpp消息时使用。
7.org.androidpn.server.xmpp.presence里面只包含PresenceManager类,用来维护client的在线状态。
8.org.androidpn.server.xmpp.push包里面的NotificationManager类包含有向client发送消息的接口。
9.org.androidpn.server.xmpp.router包负责将收到的信息包发送到相应的handler进行处理,是一个路由包。
10.org.androidpn.server.xmpp.session包定义了用来表示持久链接的session,每个session包含一条连接的状态信息。
11.org.androidpn.server.xmpp.ssl是对连接进行ssl认证的工具包。
server发送消息的整个流程主要是:
1. NotificationManager的push接口被调用。
2.使用SessionManager在当前session集合中查找相应的client链接。
3.定义自己的XMPP消息格式并组装。
4.通过相应session,向client发送消息。
在这个流程中我们需要修改的是步骤3,也就是需要定义和组装自己的xmpp消息,以便于将适当的信息传到客户端并便于客户端解析。一个简单的消息组装例子如下:
-
privateIQcreateMessageIQ(Stringtitle,Stringmessage,StringuserId,
-
Stringjson){
-
Elementnotification=DocumentHelper.createElement(QName.get(
-
"message",INQURIE_NAMESPACE));
-
notification.addElement("title").setText(title);
-
notification.addElement("text").setText(message);
-
notification.addElement("userId").setText(userId);
-
notification.addElement("json").setText(json);
-
IQiq=newIQ();
-
iq.setType(IQ.Type.set);
-
iq.setChildElement(notification);
-
returniq;
-
}
要注意的是在创建element的时候,传入的namespace要和client解析使用的namespace相匹配。
server端接收和处理消息的流程是:
1.connection收到packet,使用tsc.push.server.xmpp.codec解码。
2.router根据packet的namespace等信息,将packet路由到相应的handler。
3.handler进行处理。
相应的router和handler类在androidpn中都有例子可以参考,这里就不贴代码了。开发中只要根据client发送消息的格式,定义自己的router和handler类,然后在PacketRouter中注册router,在IQRouter中注册handler即可。
Client部分的主要包结构如下:
Client这边包含有消息的收发,解析以及持久连接的发起,重连等功能呢,十分强大,我们开发时完全不用管底层的连接,也不用担心断线,可以专注于业务部分的开发。
同时,代码结构也很简单。去除android的Service和BroadCast类以及一些工具类和常量类不谈:
1.NotificationIQ,NotificationIQProvider,NotificationPacketListener三个类负责对收到的Notification格式的消息进行解析和处理,
2.XmppManager是主控制器,NotificationService通过这个类,在后台维护androidpn连接。
3.PersistentConnectionListener,PhoneStateChangeListener,ReconnectionThread.java三个类则负责监听手机的状态并进行断线重连。
我们自定义消息时需要定义3个类:在***IQ中定义消息的实体,在***IQProvider中将消息转化为***IQ实体,在***PacketListener中对实体进行处理,具体的实现可参考NotificationIQ,NotificationIQProvider,NotificationPacketListener三个类。在定义这些类之后,还需要在XmppManager中将这3个类中注册到connection中,代码如下:
-
<spanstyle="white-space:pre"></span>connection.connect();
-
Log.i(LOGTAG,"XMPPconnectedsuccessfully");
-
-
-
ProviderManager.getInstance().addIQProvider("message",
-
Constants.NOTIFICATION_NAMESPACE,
-
newNotificationIQProvider());
-
<spanstyle="white-space:pre"></span>
-
PacketFilterpacketFilter=newPacketTypeFilter(
-
NotificationIQ.class);
-
-
PacketListenerpacketListener=xmppManager
-
.getNotificationPacketListener();
-
connection.addPacketListener(packetListener,packetFilter);
需要注意的是,注册***IQProvider时,传入的namespace需要和服务端组装消息时使用的namespace一致,才能正确的收到。
分享到:
相关推荐
androidpn基于Xmpp的消息推送源码包含了完整的客户端和服务器端。androidpn客户端需要用到一个基于java的开源XMPP协议包asmack,这个包同样也是基于openfire下的另外一个开源项目smack,不过我们不需要自己编译,...
使用androidpn实现消息推送,有android客户端和server端,对android端做了优化,可以断网重连,后台服务不会被手机管家之类杀死。 需自行更改res/raw/androidpn.properties里的server IP。
毕业设计《Android平台校园消息推送服务的设计与实现》,基于AndroidPN实现的即时通信系统,Android客户端部分。.zip毕业设计《Android平台校园消息推送服务的设计与实现》,基于AndroidPN实现的即时通信系统,...
基于androidPN的android客户端远程推送,可直接运行,附运行说明
androidpn 消息推送客户端+服务器端
androidpn 消息推送 服务器端源码 可以自己修改也可以直接启动运行 包含web的管理页面 最全面的android消息推送服务端程序
androidpn 代码中实现了服务器重启后自动重连和离线消息推送和消息回执 android手机端的消息推送实现
Androidpn推送框架源码分析及配置方法,压缩包里面包括服务端和客户端代码,及说明文档
本文介绍了一种基于XMPP 协议的AndroidPn 开源框架的实现模型,将其部署在MySQL 数据库和Tomcat 服务器下,实现并改进了实时推送消息、自定义消息结构和内容、推送服务开机启动、手机端服务唤醒、发送离线消息等实用...
androidpn为Android应用提供消息通知推送支持, 它本质上服务器端基于 Openfire,客户端基于 asmack,这二者都最 XMPP IM 开源实现里的二个基本组件,应该说 androidpn 只是把二者更多地结合起来用于做 Push的场景。...
androidpn消息推送 其中包含客户端 服务器端包含tomcat和jetty版本
包括android客户端的eclipse,androidStudio和服务器端的源码,可直接运行,对源码进行了修改,增加了心跳机制,解决断线冲重连问题
网上很多讲解androidpn推送的博客,也有很多源码,下载后导入有时也会有错误,此资源可以完美的运行,运行前你需要完成如下操作:1、启动Tomcat 2、下载androidpn 地址:http://sourceforge.net/projects/androidpn/...
这是一个消息推送客户端,安装在自己的手机上,可以实现与andriodpn-sever的连接,接受推送的消息
毕业设计《Android平台校园消息推送服务的设计与实现》,基于AndroidPN实现的即时通信系统 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩...
androidpn-client推送客户端
这是android消息推送开发的开源代码,这里为大家提供一下,我们可以一起学习下
韩国著名的开源消息推送AndroidPN客户端,采用XMPP协议。
Android消息推送源码,包含5个项目源码:androidpn,android消息推送通知smack源码,ExText,pushMessage,基于消息推送的聊天工具