前言:
最近公司需要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/
就可以出现如下界面:
![](https://i-blog.csdnimg.cn/blog_migrate/ee52e77ebcdd83a8fc24189c9cdbb186.png)
然后在浏览器中的Users界面可以看到手机与服务器之间的连接.如:
其中通知里面的内容就是网页中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服务器.
![](https://i-blog.csdnimg.cn/blog_migrate/e0a1f6fa88f158584ce5a60b9ef003d9.png)
在默认的情况下登录不成功,需要在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
按默认排序 显示最新评论 共有53个评论 (最后回答: 2年前 )
-
现在我遇到一个问题,就是我wifi网络跟gprs网络链接切换的时候,会出现链接不上的问题,是不是有什么需要设置的,比如username或者是socket冲突,占用什么的?不是很了解,希望能指教一下
-
楼主为什么选择Androidapn, 有什么优点呢? 还有就是使用oschina的轮询机制行不行呢? 我现在也在选一种机制,纠结中!
- halley选择androidapn主要这是开源,跟轮询polling相比,从耗费的电量、流量和到达的及时性来看,PUSH有明显的优势,因为轮询要定时去服务器上查询数据,而PUSH是手机跟服务器保持一个TCP长连接,当服务器有数据时,实时推送到客户端。但PUSH的实现和维护成本较高,技术也有一定难度。 (3年前)
- halley选择androidapn主要这是开源,跟轮询polling相比,从耗费的电量、流量和到达的及时性来看,PUSH有明显的优势,因为轮询要定时去服务器上查询数据,而PUSH是手机跟服务器保持一个TCP长连接,当服务器有数据时,实时推送到客户端。但PUSH的实现和维护成本较高,技术也有一定难度。 (3年前)
-
聚能推有一个单机版的推送,还不错,可以试一下http://www.36kr.com/p/204040.html
-
-
楼主,请问这种推送的原理是什么呢?是通过长连接实现的吗?
如果发生服务器重启,客户端会有什么反映呢?
-
我的在tomcat下运行,但是启动后,5222端口可以监听,启动模拟器的时候服务器监听不到,发消息没反应,而且好像回话没建立,session都是空,怎么回事呢?properties文件的ip地址 我改成127.0.0.1了
-
我通过eclipse在tomcat上运行服务器端,没有问题,但是当我打包成war文件上传到tomcat上,再运行,访问就出错了。
-
楼主真心求教一下,每次更换程序的时候 username会改变啊。uuid不是固定的吗? 怎么每次更换程序都不一样呢? 怎么才能修改成固定的 请楼主指教一下
- halley一次他会判断SharePreference里面存不存在,如果不存在就啊hi用UUID方式生成一个,在放进SharePreference里面去。 所以你可以搜索UUID,定位代码。然后修改它的生成方式,改成你想要的就可以了。 (3年前)
- halley一次他会判断SharePreference里面存不存在,如果不存在就啊hi用UUID方式生成一个,在放进SharePreference里面去。 所以你可以搜索UUID,定位代码。然后修改它的生成方式,改成你想要的就可以了。 (3年前)
-
-
我的客户端,总是报错,The application AndroidpnClient(process org.androidpn.demoapp)has stopped unexpectedly.please tyr again.
- 极光推送一个朋友,三四天的Rails学习之路(0回/93 阅,7天前)
- 【深圳站】2015极光推送移动互联信息安全沙龙(0回/287 阅,4个月前)
- 关于推送,你可能忽略的那些事儿(0回/74 阅,6个月前)
- 极光推送推出极光IM功能了(2回/2013 阅,10个月前)
- JPush APNs iOS通知推送支持 badge +1(1回/2417 阅,1年前)
- 使用 Android 模擬器(1回/2670 阅,6年前)
- 建立一個 Android 项目(0回/2715 阅,6年前)
- 描述使用者介面(0回/472 阅,6年前)
- 設計使用者介面(UI)(2回/1881 阅,6年前)
- 初見 Intent(0回/1091 阅,6年前)
- 加入选单(Menu)(0回/1296 阅,6年前)
- 定义 Android 清单(3回/3832 阅,6年前)
- 加入新 Activity(2回/1416 阅,6年前)
- Activity之间的转换(0回/2443 阅,6年前)
- 教你如何在iPhone上安装Android系统(1回/1993 阅,6年前)
- Android 开发之:Intent.createChooser() 妙用(2回/5409 阅,6年前)
- Android 文件管理器必备推荐(0回/1242 阅,6年前)
- android Linkify(2回/738 阅,4年前)
- android获得图片资源的三种方式(3回/3069 阅,4年前)
- 自定义 Android 的警告提醒声音(0回/1383 阅,4年前)
- android 轻松实现消息推送功能。自家的,大家有时间测测用用(15回/7729 阅,4年前)