关于服务器端向 Android 客户端的推送,主要有三种方式:轮询,应用程序应
当阶段性的与服务器进行连接并查询是否有新的消息到达,你必须自己实现与
服务器之间的通信,例如消息排队等。而且你还要考虑轮询的频率,如果太慢
可能导致某些消息的延迟,如果太快,则会大量消耗网络带宽和电池;SMS
(通过发送短信并解析短信内容来获取服务器端的指令),这个出现的问题是
很难找到免费的网关来发送短信;最后就是持久连接,主要是 Socket 通讯,这
个解决了性能问题,但是耗电问题依旧没能解决。
在这里,我们主要介绍的是第三种,用持久连接的方式来进行推送。现在比较
成熟的及时消息传递协议共有四种,而无疑最为主流就是 XMPP 协议,它是一
种基于 XML 的传递协议,具有很强的灵活性和可扩展性。它的特点是将复杂性
从客户端转移到了服务器端。在网上可以找到很多的 XMPP 资料,这里就不在
赘述了,不然越扯越多。总之,XMPP 主要显著的优点主要有以下几个方面:
1、 分布式 任何人都可以运行自己的 XMPP 服务器,它没有主服务器
2、 安全性很高。使用 SASL 及 TLS 等技术的可靠安全性
3、 开发性 它是开源的,易于进行学习和了解
4、 跨平台 毋庸置疑,使用的 XML 进行传输的
说完优点,我们言归正传,基于 XMPP 协议的 java 开发有一个开源框架,
那就是 smack , 它 主 要 封 装 了 一 些 XMPP 的 实 现 。 而 如 果 把 它 直 接 用 在
Android 上是不行的,因为 android 缺少了一些 java 的类库,于是一个改进版
的 asmack 诞生了,它是专门为 android 而改进的 android smack。而另外一个
开源框架的诞生,则是对在引用 smack 的基础上实现和服务器端的持久连接,
以 实 现 服 务 器 对 客 户 端 的 推 送 , 那 就 是 android push notification , 简 称
androidpn。
Androidpn 在客户端集成了 asmack。这样就可以很容易的简立一个和服务
器端的基于 xmpp 协议的 socket 连接。Androidpn 的客户端中,进行管理连接
的类是 XmppManager ,它主要用来管理连接的信息,比如 XMPP 的端口、
IP、登录的用户名密码,以及对连接的维护。为什么还有用户名和密码?这不
得不提 到 XMPP 的 具体细节 。整个服 务 器端和客 户端的通 信是基于 一个
session(会话)过程,会话开始,首先会指定服务器的端口号,然后把上述提
到的信息发送到服务器端,怎么发送消息的呢?以<stream>根节点的方式开始