理解这篇文章后应该具有的能力:

一)了解androidpn体系结构

二)掌握android消息推送与接收机制【Android的收发流程】

三)按需扩展和改动androidpn

Android概述:

*androidpn是基于xmpp开源组件的一个整合方案

-->Server端:openfire ,apache mina

-->客户端:基于smack的asmack

技术基础:

-->Spring Hibernate SpringVMC

-->Socket/Thread/XML


Server代码结构说明

*dao model 和service

*util包中的类用来加载resources中的配置文件:config.xml(指定监听端口和ssl证书目录等熟悉)

*xmpp:

-->推送核心包

-->入口类XmppServer,这个类用来启动和停止Server程序


org.androidpn.server.xmpp结构说明

*auth:包含认证信息的一些类:可以扩展认证模块

*codec:是XMPP协议的XML文件解析包,server收发消息通过此处编码和解码;可扩展自定义编码/解码规则

*handler:消息的处理:可以针对不同的消息类型定义自己的handler

*net:负责维护与client之间的持久连接,并实现了一些传输方式供发送xmpp消息xmpp消息时使用。

*presence:PresenceManager类,用来维护client的在线状态。

*Push:NotificationManager类包含有想client发送消息的接口

*router:将受到的信息包发送到相应的handler进行处理。

*session:定义了用来表示持久连接的session,每个session包含一条连接的状态信息

*ssl:连接进行ssl认证的工具包


关于apache mina:在Spring-config.xml里面配置了相关内容。需要知道其用法。

androidPN体系结构_第1张图片

其服务端:


androidPN体系结构_第2张图片

关于客户端的作用:【本项目未用到,可以多了解下】


androidPN体系结构_第3张图片


客户端:Client

Client这边包含消息的收发,解析以及持久连接的发起。

Notifier:客户端发送通知的类

XmppManager是控制器,NotificationService通过这个类在后台维护与服务的连接

ServiceManager:管理消息服务和加载相关的配置

android的Service和BroadCast类以及一些工具类和常量类

NotificationSettingsActivity:推送信息设置页面.

NotificationIQ,NotificationIQProvider,NotificationPacketListener三个类:消息的数据包,负责对收到的Notification格式的消息进行解析和处理

NotificationPacketListener:监听从服务器发送过来的数据包并重复执行数据包解析、发送广播、发送通知的操作。

ConnectivityReciver:处理服务端发送的推送消息

NotificationService:后台服务用语相应服务端的消息

PersistentConnectionListener:监控连接关闭和重连事件的监听

PhoneStateChangeListener:监听手机状态的事件监听类

Reconnection:重连的线程类。


服务端:

关于androidpn的asmack

*Smack:基于xmpp协议的及时通信客户端编程库

*Asmack:Smack库的Android版本 建立一个和服务器端的基于xmpp协议的socket连接

*URL:可以从网上下载


服务端和客户端的流程:【流程是非常重要的】

androidPN体系结构_第4张图片


Android Client执行流程:【流程是非常重要的】

创建服务:

->初始化ServiceManager

-->启动服务

-->建立连接

-->用户验证

**注册用户

**用户登录

-->断开连接

-->重新连接

读取配置文件


执行流程:【流程是非常重要的】

androidPN体系结构_第5张图片

androidPN体系结构_第6张图片


Client<接收消息>流程【流程是非常重要的】

客户端ConnectivityReceiverReceive(建立网络连接)&通过验证&连接到服务器的前提下

1.NotificationPacketListener:

1)会一直监听从服务器发送过来的数据包Packet

2)并重复执行数据包解析:NotificationIQ-->Intent

3)发送广播(sendBroadcast给NotificationReceive)

2)NotificationReceiver:onReceiver

3)NotificationDetailsActivity:回发消息

1)封装消息:IQ

2)XMPPConnection sendPacket

androidPN体系结构_第7张图片



Server<发送消息>流程

1.NotificationManager的push接口被调用

2.使用SessionManager在当前session集合中查找相应的client 连接

3.XMPP消息格式兵组装

4.通过相应的session,向client发送消息


SERVER<接收>消息流程

1.connection收到packet,使用org.android.server.xmpp.codec解码

2.router根据packet的namespace等信息,将packet路由到相应的handler。

3.handler进行处理:实际上只要根据client发送消息的格式,定义自己的router和handler类,然后在PacketRouter中注册router,在IQRouter中注册handler即可


androidpn问题思考

服务重启后,客户端如何重新连接

消息处理:

服务器收到消息后如何知道发给哪个

服务器端如何保存用户消息

消息如何跟踪:用户是否收到消息,用户是否读取消息

客户端离线消息如何处理

安全&用户管理

用户管理

验证与授权

信息安全

IP过滤机制,防止DDOS共计,按照频度和次数过滤

资源管理

推送平台服务

业务改进

消息封装

消息跟踪

消息管理


更多相关文章

  1. WiFi流程
  2. Android源码--开机启动流程学习
  3. Android Linux Kernel 移植流程
  4. Android基本控件和事件以及消息总结
  5. Android Framework 之 SystemUI的启动流程
  6. Android录制或播放语音消息时关闭其他媒体播放

随机推荐

  1. Android(安卓)多点触控(放大、缩小、旋转
  2. Arcgis Android 基本概念 - 浅谈
  3. Android 性能监控与分析方法
  4. Android 搭建Junit测试环境
  5. Android实现系统打印功能
  6. Android批量添加删除联系人
  7. android proground混淆编译
  8. Android(安卓)中的BroadCastReceiver
  9. AudioRecord||AudioTrack
  10. android的唯一性