Android推送 采用XMPP协议实现
来源:互联网 发布:java里的goto 编辑:程序博客网 时间:2024/05/18 04:02
在Android手机平台上,Google提供了C2DM(Cloudto Device Messaging)服务,起初我就是准备采用这个服务来实现Android手机上的推送功能。
Android Cloud to Device Messaging (C2DM)是一个用来帮助开发者从服务器向Android应用程序发送数据的服务。该服务提供了一个简单的、轻量级的机制,允许服务器可以通知移动应用 程序直接与服务器进行通信,以便于从服务器获取应用程序更新和用户数据。C2DM服务负责处理诸如消息排队等事务并向运行于目标设备上的应用程序分发这些 消息。
但这个服务存在很大的问题:
1、C2DM内置于Android的2.2系统上,无法兼容老的1.5到2.1系统;
2、C2DM需要依赖于Google官方提供的C2DM服务器,由于国内的网络环境,这个服务经常不可用,如果想要很好的使用,我们的App Server必须也在国外。这个可能不是每个开发者或公司能实现的。
所以最终我放弃了这个方案。采用XMPP协议实现Android推送,事实上Google官方的C2DM服务器底层也是采用XMPP协议进行的封装。XMPP(可扩展通讯和表示协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线探测。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息。
androidpn是一个基于XMPP协议的java开源Android push notification实现。它包含了完整的客户端和服务器端。
androidpn的实现示意图如下:
androidpn客户端需要用到一个基于java的开源XMPP协议包asmack,这个包同样也是基于openfire下的另外一个开源项目smack, 不过我们不需要自己编译,可以直接把androidpn客户端里面的asmack.jar拿过来用。客户端利用asmack中提供的 XMPPConnection类与服务器建立持久连接,并通过该连接进行用户注册和登录认证,同样也是通过这条连接,接收服务器发送的通知。
androidpn 服务器端也是java语言实现的,基于openfire开源工程,它的Web部分采用的是spring框架。Androidpn服务器包含两个部分,一个 是侦听在5222端口上的XMPP服务,负责与客户端的XMPPConnection类进行通信,作用是用户注册和身份认证,并发送推送通知消息。另外一 部分是Web服务器,采用一个轻量级的HTTP服务器,负责接收用户的Web请求。服务器架构如下:
最上层包含四个组成 部分,分别是SessionManager,Auth Manager,PresenceManager以及Notification Manager。SessionManager负责管理客户端与服务器之间的会话,Auth Manager负责客户端用户认证管理,Presence Manager负责管理客户端用户的登录状态,NotificationManager负责实现服务器向客户端推送消息功能。
服务器端界面如下,分别对应了上述的几个功能模块:
下载了客户端代码后需修改androidpn.properties文件中的xmppHost的地址,如下:
点击Submit发送以后,可以在Android手机端看到接收的消息如下
点击OK按钮可以进行相应的URI跳转。
该解决方案的最大优势就是简单,并且避免了C2DM的两个问题。利用XMPP协议我们还可以进一步的对协议进行扩展,实现更完善的功能。
- 采用XMPP协议实现Android推送
- 采用XMPP协议实现Android推送
- Android推送 采用XMPP协议实现
- 采用XMPP协议实现Android推送
- Android实现推送解决方案之一--XMPP协议
- Android消息推送(主: XMPP协议实现Android推送)
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现android消息推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android推送
- 采用MQTT协议实现Android消息推送
- android persistent属性研究
- 台风
- android编程之代码布局(常见错误)
- 关于产品的一些思考——腾讯之微信
- Spring常用注解
- Android推送 采用XMPP协议实现
- 国际化
- 2014美团网笔试题目(总结)
- android - 自定义标题栏(在标题栏中增加按钮和文本居中)
- 蒙特卡洛法求Pi
- DevExpress GridControl使用方法总结
- Maven多模块项目 eclipse热部署 Maven项目实现 tomcat热部署 二
- ios7下评论的链接
- 区别div和span