Android 消息推送(一)基于 XMPP 协议 AndroidPN 推送功能

客户端、服务器端程序搭建

最近公司需要 Android 的消息推送,在网上找了很多消息推送的例子,都是无法运行.

经过一段时间的研究,终于把例子运行起来了。现在共享出来,共同学习。

在 androidpn 的官网下载(http://sourceforge.net/projects/androidpn/files/),也可以下载我已经调好的程序。

现在把源码共享给大家,http://download.csdn.net/detail/johnny901114/4410546

在下载的文件里面在 bin 目录下有 run.bat 文件直接双击即可运行。然后在浏览器里面输入 http://127.0.0.1:7070 即可

如果在 eclipse 中运行了客户端即可在服务器端看到,这个很简单,不是本文的重点。

现在主要的就是把下载后的的服务器端源码搭建起来,然后部署到 myeclipse 中运行

需要注意的是我的这个源码使用数据库是 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 出现如下界面:

https://img-my.csdn.net/uploads/201208/10/1344562016_9896.png


在默认的情况下登录不成功,需要在 tomcat-user.xml 文件中配置,在该文件的加上如下配置:

<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>

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

https://img-my.csdn.net/uploads/201208/10/1344562145_4642.png

注意需要在服务器电脑上有相应数据库(我这个里是 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 来实现自己的服务器,可以研究下 apache 的项目 mina 该项目就是封装 Java NIO 的。

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

5)也可以通过 MQTT 协议来实现推送 .

      客户端下载地址 : https://github.com/tokudu/AndroidPushNotificationsDemo

      服务器下载地址 : https://github.com/tokudu/PhpMQTTClient

更多关于MQTT的讲解:Android 消息推送(二)基于 MQTT 协议实现的推送功能

评论 105
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chiclaim

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值