首先我们比较一下目前可以实现推送的三种方式:
1.客户端定时去服务端取或者保持一个长Socket,从本质讲这个不叫推送,这是去服务端拽数据。但是实现简单,主要缺点:耗电等
2.Google的C2DM,具体不细说,缺点,服务器在国外,不是很稳定。
3.XMPP协议,它是一种基于XML的传递协议,具有很强的灵活性和可扩展性。它的特点是将复杂性从客户端转移到了服务器端。
androidpn是基于XMPP协议的用于向Android客户端推送文本信息的一套开源的工具。它帮我们做了那些维护Socket长连接等复杂的事情。
1.下载androidpn服务器端与客户端的Demo并运行;一共包含三个zip文件:
1)androidpn-client-0.5.0.zip
2)androidpn-demoapp-0.5.0.zip
3)androidpn-server-0.5.0-bin.zip
2.启动服务器端与客户端,通过Web页面推送。XMPP在android客户端上的应用。分两部分实现:服务端搭建和客户端实现
服务端搭建:如果想测试一下功能,可以直接用搭建好的服务就行,解压androidpn-server-0.5.0-bin.zip,进入bin目录下双击run.bat,直接运行服务;
在浏览器上输入 http://127.0.0.1:7070 就进入管理界面。
遇到问题:
a.在win7环境下,双击运行run.bat闪退
解决办法:点击run.bat,右键‘编辑’,在文件末尾添加'pause';
b.运行run.bat出现’Error: JAVA_HOME environment variable not set, Androidpn not started.‘
原因:没有配置正确的环境变量;
解决办法:在’我的电脑‘-属性-系统设置-环境变量,配置环境变量JAVA_HOME = jdk安装目录,地址写到jdk目录下bin的上一级,如C:\jdk;或者也可以编辑run.bat,把内容中的’JAVA_HOME‘强制替换成jdk目录地址
c.运行run.bat出现’Error: no `server' JVM at `C:\jdk\bin\server\jvm.dll'.‘
原因:jdk-bin-server目录下缺少jvm.dll文件
解决办法:默认安装jdk完成后,在bin目录下有client目录,但是没有server目录,在client目录下有jvm.dll文件,可以直接新建server文件夹,将jvm.dll文件拷贝进去
客户端实现:
解压androidpn-client-0.5.0.zip,导入eclipse工程,运行前更改一处IP地址,修改res/raw/androidpn.properties文件中的xmppHost为xmppHost=10.0.2.2
原因:模拟器访问本机需要改成10.0.2.2,下面为SDK中IP说明。
[模拟器把10.0.2.2认为是所在主机的地址,127.0.0.1是模拟器本身的回环地址,10.0.2.1表示网关地址,10.0.2.3表示DNS地址,10.0.2.15表示目标设备的网络地址]
运行android程序,从服务端发送消息,客户端就可以收到推送消息了。
遇到问题:
a.运行时出现’java.lang.NoClassDefFoundError: org.androidpn.client.PersistentConnectionListener‘异常
原因:更新了Android SDK 和ADT 到 R17 以后出现了一个问题,就是原来所有引入第三方的jar文件的项目,运行到一旦调用了第三方jar文件里的类的地方,都会出现类似
E/AndroidRuntime : java.lang.NoClassDefFoundError 的错误。
解决方法:将所有的第三方jar文件从 standard Java build path中移除;右键项目名 > Properties > Java Build Path > tab Libraries >将 “Android X.X” and the “Android Dependencies”之外的所有jar文件引用全部去除重命名lib文件夹为libs;ibs库文件夹就能被 Android plugin 添加到 “Android Dependencies” 条目里。;Clean the project
b.Android 中出现这样的警告 Exported service does not require permission
解决办法:加上这个就可以了android:exported="false";比如: <service android:name="MusicService" android:exported="false">
使用Androidpn实现Android消息推送
于 2022-06-28 22:58:18 首次发布