一:AndroidPN环境配置
AndroidPN框架实现了从服务器到android移动平台的文本信息推送。下面是AndroidPN的环境配置
1.先确保本机已经配置好了java环境
2.下载androidpn-client-0.5.0.zip和androidpn-server-0.5.0-bin.zip
网址:http://sourceforge.net/projects/androidpn/
解压两个包,Eclipse导入client,配置好目标平台,打开raw/androidpn.properties文件,
apiKey=1234567890
xmppHost=10.0.2.2
xmppPort=5222
如果是模拟器来运行客户端程序,把xmppHost配置成10.0.2.2 (模拟器把10.0.2.2认为是所在主机的地址,127.0.0.1是模拟器本身的回环地址).
如果是真机,配置成本机的IP地址 比如我在局域网内的IP是192.168.1.101
xmppPort=5222 是服务器的xmpp服务监听端口(注意5222端口貌似是固定的,我改成其他端口就行了)
二:运行测试
从命令行运行androidpn-server-0.5.0\bin\run.bat启动服务器(有些朋友说会一闪而过启动不了,注意要从命令行进入该目录了在运行),从浏览器访问http://127.0.0.1:7070/index.do (androidPN Server有个轻量级的web服务器,在7070端口监听请求,接受用户输入的文本消息)
运行客户端,客户端会向服务器发起连接请求,注册成功后,服务器能识别客户端,并维护和客户端的IP长连接
进入Notifications界面,输入消息发送
真机客户端接受到server推送来的消息
最后,我把AndroidPN服务器配置的VPS进行测试,同样的测试成功!
这样AndroidPN的环境就搭好了。真机环境也测试通过
问题:
1.asmack的包太大,3百多K。
2.只是完成Android的Push功能使用XMPP协议感觉很笨重。
3.androidpn服务器端的负载很难控制,除非自己改写。
第一个问题关系不大,毕竟一个软件多了300多K不算什么,如果自己来控制socket连接,我估计没有100K也很难控制好。
第二个问题确实如此,使用XMPP的后果是带来了60%的信息冗余量
第三个问题,负载的控制应该来说,用到socket都必须要考虑的,负载方面,androidpn用到了MINA这个socket框架,而在socket的处理方面,很多人都是用的socket来处理的。
总的来说,源代码的开放是最大的优点,就算用到androidpn,无论如何也是要在原有的基础上进行修改的,照搬照抄肯定是不行的。但是比自己用socket来控制,在服务器和客户端之间建立一个网关,要来的容易。
注意:需将lib 冲命名 改为libs,然后在build path里面导入libs这个包,否则会报类找不到的错误
首先,基础中的基础,就是按照第一篇日志中所说,使用模拟器完成web推送。这一块非常简单,按照第一篇去做完全可行,可能出错的地方就是你忘记更改配置文件了。
后来我下载了第二篇日志中博主提供的tomcat版本服务端,放在自己本机tomcat下,并且启动。用模拟器去测试发现无法推送,配置文件也没有错。检查后发现,原来自己tomcat的端口是8080,而server中配置的是7070。只要打开config.properties,修改admin.console.port=端口号,即可。
再接着,用同一个局域网内其他机子的客户端模拟器进行测试,只要将androidpn.properties中的xmppHost=服务端所在内网IP就可以啦。比如192.168.1.150。
用真机测试,其实和模拟器没啥区别,只要配置文件不写错,原则是不会出问题的。但是我测试的时候,还是出现无法推送成功的问题。仔细检查后,原因有二。
1.客户端android版本太低,换个android4.0版本就可以。貌似是不兼容低版本。
2.真机上其他的应用中,也有应用到这个androidpn的。其中,在androidpn.properties中,apikey默认是123456789。因为那个应用和我自己本机都选择了默认的,所以我将自己这里的apikey改掉了。切记!这里有一点需要注意的,客户端androidpn.properties中更改了apikey,服务端config.properties也要随之修改。!!
OK,基本上单独的web推送就完成了。
接下来就是整合到自己项目中,也就是从自己项目后台将数据推送到客户端,至于androidpn的server端,则作为中间的桥梁。
这里需要注意一点,androidpn会在你本地数据库中新增一个表apn_user。如果你本地数据库有权限,拒绝的话,你最好自己先手动增加这么一张表。
首先,我单独启动一个新的tomcat,将server端部署到这下面,修改配置文件config。properties,jdbc.properties。jdbc.properties这个文件是配置你本地数据库的参数的,不能有错。启动后,简单测试成功,在自己项目中使用http协议将数据POST到server端这个org.androidpn.server.console.controller.NotificationController类的send方法中。具体参数名称及获取参数的代码,可以修改server端。
在这里插一句,不论时间多么紧张,至少你得追一边代码,尤其这个类。
代码写好后可以执行,断点跟踪下,只要你代码正确,配置文件没错,是可以正常推送的。
基本上,写到这里的话,应该可以满足项目需求了。如果你还需要将哪些用户在线的功能整合到你自己项目中。那你就得自己跟踪下代码了。
我项目做到这里,基本上都是在windows环境下。将项目部署到linux环境下,又出问题了。
路径问题比较容易坚决,按照后台日志中提示的地方,将路径修改下。
关键是在linux下重启server端,会发现报错,5222端口被占用。因为时间限制,能力有限,没办法修改代码,只能每次重启时,都先用命令将5222端口杀掉。