【转载】Android消息推送(一)--AndroidPn(XMPP协议)Demo版到正式上线

freerocker 2013-06-27 11:24:38
前言:
最近公司需要android的消息推送,在网上找了很多消息推送的例子,都是无法运行.
经过一段时间的研究,终于把例子运行起来了.现在共享出来,共同学习.
在下载的文件里面在bin目录下有run.bat文件直接双击即可运行.然后在浏览器里面输入
http://127.0.0.1:7070即可,如果在eclipse中运行了客户端即可在服务器端看到.这个很简单,不是本文的重点.现在主要的就是把下载后的的服务器端源码搭建起来,然后部署到myeclipse中运行,当然可以在androidpn的官网下载(http://sourceforge.net/projects/androidpn/files/),
也可以下载我已经调好的程序.现在把源码共享给大家,http://download.csdn.net/detail/johnny901114/4410546
需要注意的是我的这个源码使用数据库是mysql,所以读者的pc机上需要安装mysql数据库,关于数据这里就不多说了.当然最好能够懂点spring和hibernate,这样的话改的时候更加顺手.
但是可能还有不懂hibernate的人,为了能够让他很好的运行,这里就简单的说一下了.

过程:
首先打开jdbc.properties:


# JDBC Configuration
jdbcDriverClassName=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
jdbcUsername=root
jdbcPassword=
# DBCP Pool settings
jdbcInitialSize=5
jdbcMaxActive=10
jdbcMaxIdle=5
jdbcMaxWait=30000
jdbcValidationQuery=select 1


------------------------------------------------------------
jdbcDriverClassName:表示数据库驱动的类名
jdbcUrl:表示连接数据库的url,其中test是数据库的名称
hibernate.dialect: 数据库方言
jdbcUsername和jdbcPassword:mysql的用户名和密码
其他的就不多说了.
如果没有意外的话,服务器启动成功后,可以在浏览器里输入:http://localhost:8080/
就可以出现如下界面:

然后,运行客户端代码,需要注意的是把androidpn.properties中的xmppHost改为你的局域网ip地址.运行如下图所示:

然后在浏览器中的Users界面可以看到手机与服务器之间的连接.如:

然后在Notifications界面可以发送消息给客户端:

在客户端就收到了通知:

其中通知里面的内容就是网页中message输入的内容.ok按钮就是网页中uri的内容.

最后还有一个问题当我们服务器端重启的时候,客户端就无法在连接到服务器了,除非把android后台的服务
关掉,然后重启才行.在XmmpManager中加上如下红色代码就可:
private void addTask(Runnable runnable) {
Log.d(LOGTAG, "addTask(runnable)...");
taskTracker.increase();
synchronized (taskList) {
if (taskList.isEmpty() && !running) {
running = true;
futureTask = taskSubmitter.submit(runnable);
if (futureTask == null) {
taskTracker.decrease();
}
} else {
//解决服务器端重启后,客户端不能成功连接androidpn服务器
runTask();

taskList.add(runnable);
}
}
Log.d(LOGTAG, "addTask(runnable)... done");
}



----------------------------------------------------------------------------------------------------------------------------------------------------------


后续: 2012-8-10

今天公司终于把Androidpn服务器端部署到服务器端了,终于真正的上线了.
大体步骤如下:
1,把服务器的程序通过myeclipse到处war包,然后访问tomcat首页,把war包上传到tomcat服务器.

点击Tomcat Manager出现如下界面:

在默认的情况下登录不成功,需要在tomcat-user.xml文件中配置,在该文件的加上如下配置:
01.<role rolename="manager-gui"/>
02.<user username="tomcat" password="tomcat" roles="manager-gui"/>

然后通过如下界面把war包上传到tomcat上:

注意需要在服务器电脑上有相应数据库(我这个里是mysql),并且有Androidpn对应的数据库(我这里的数据库名为test).并且还要注意数据库的用户名和密码.
2,假设服务器端已经能够访问了,需要把客户端的androidpn.properties文件的xmppHost的值改成你服务器端的主机名称,假设你的服务器端访问地址为:http://push.android.net:8080/ ,那么把xmppHost的值改成push.android.net

3,注意把你的8080端口和5222端口打开(这里是服务器那边的人搞的自己不是很懂).




---------------------------------------------------------------------------------------------------------------------------------------------------------


后续二 :关于Androidpn的一些问题(2012.8.16)

1,如果把客户端的随机生成的UUID代码,改成把设备的id或者mac(device/mac)作为用户名,会出现重复插入的错误.
2,把客户端的数据清除(或者重新安装),那么sharedPre里的数据也会没有,然而服务器端又有我们手机的设备id,然后启动程序又会出现重复插入的问题.

所以解决方案为,在服务器端保存用户的时候,检查数据时候存在该用户.
因为在客户端来说自己有没有注册到服务器端,通过SharedPreferences里面是否存在username和password.

-------------------------------------------------------------------------------------------------------------------------------------------------

后续三 :关于Android推送的其他方式(2013.1.4)

其他的推送方案 :

1> 如果想要方便成本又低 , 推荐使用极光推送 , 只要集成它的官方SDK即可 . 在国内是比较出名的 , 推送基础服务是免费的 , 还有富媒体推送 , 官网为http://www.jpush.cn/

2> android官网最新提供的 , GCM ,是用来代替的C2DM , 其官网为 http://developer.android.com/google/gcm/index.html

3> 可以通过Java nio来实现自己的服务器, 听同事说它的经理自己通过Java NIO写了一个推送服务器 可以接收30w左右的并发, 自己正在尝试写一个 , 如果有进展 , 一定会共享给大家 . 同时可以研究apache的项目mina 该项目就是封装Java NIO的 .

4> 当可以使用XMPP协议来实现 推送的. 自己也曾写过简单的一对一即时聊天软件.

5> 也可以通过MQTT协议来实现推送 .
客户端下载地址 : https://github.com/tokudu/AndroidPushNotificationsDemo
服务器下载地址 : https://github.com/tokudu/PhpMQTTClient
...全文
7283 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinat_22959689 2014-12-01
  • 打赏
  • 举报
回复
用tomcat部署出错呀
  • 打赏
  • 举报
回复
已经配置成功,谢谢分享
  • 打赏
  • 举报
回复
刚刚想学习,正好可以看看
nyajhqpf 2014-05-13
  • 打赏
  • 举报
回复
刚刚想学习,正好可以看看
ql1071288460 2014-04-25
  • 打赏
  • 举报
回复
使用xmpp信息推送下载开源代码,选择single device时需要从user页面复制用户名,很麻烦。想设置select下拉列表显示在线的用户名,一直无法实现,跪求代码。。。
酒比花香 2014-04-21
  • 打赏
  • 举报
回复
好样的
e616656856 2014-04-21
  • 打赏
  • 举报
回复
楼主,向你请教一下,我使用myeclipse调用极光推送的接口,总是提示我1004错误,我把代码放到eclipse上却能正常运行,而且两个工具的编码格式都是utf-8。这是怎么回事,你能帮助我解决一下么?
csdn_boy 2014-01-24
  • 打赏
  • 举报
回复
咨询楼主个问题,为什么每次注册的时候服务端都要去往apn_user表里做两次操作,没大看明白这点
Hello-Android 2013-10-30
  • 打赏
  • 举报
回复
Hello-Android 2013-10-30
  • 打赏
  • 举报
回复
为什么 那个android程序运行会报错呢?
angled___ 2013-10-30
  • 打赏
  • 举报
回复
今天公司刚发布需求,刚好需要做推送,真巧,看到了,借鉴下
Android_shi 2013-07-11
  • 打赏
  • 举报
回复
楼主,我用的是androidpn现在有这样的问题,在服务器没关闭的时候客户端时间稍微长一些,服务器上就没有户了,客户端的服务还都在开启状态,导致推送失效,请问需要怎么解决?请指点。我弄了两天也没弄清楚, shiyenba@163.com这是我的邮箱,十分感谢您能恢复我,谢谢!!
东山少爷猪头 2013-07-08
  • 打赏
  • 举报
回复
很不错,希望楼主能分享更多xmpp的经验
xcwstsoftware 2013-06-27
  • 打赏
  • 举报
回复
嗯,很好,正需要那

80,360

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧