Android消息推送之Androidpn_Demo版到正式上线

移动开发 Android
本文讲述了一位程序员在公司项目上线前,对于Android消息推送的深入研究的全过程与总结,拿出来与大家分享,希望能帮助到大家。

最近公司需要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:

 

  1. # JDBC Configuration 
  2. jdbcDriverClassName=com.mysql.jdbc.Driver 
  3. jdbcUrl=jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull 
  4. hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect 
  5. jdbcUsername=root 
  6. jdbcPassword= 
  7. # DBCP Pool settings 
  8. jdbcInitialSize=5 
  9. jdbcMaxActive=10 
  10. jdbcMaxIdle=5 
  11. jdbcMaxWait=30000 
  12. 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中加上如下红色代码就可:

 

  1. private void addTask(Runnable runnable) { 
  2.         Log.d(LOGTAG, "addTask(runnable)..."); 
  3.         taskTracker.increase(); 
  4.         synchronized (taskList) { 
  5.             if (taskList.isEmpty() && !running) { 
  6.                 running = true
  7.                 futureTask = taskSubmitter.submit(runnable); 
  8.                 if (futureTask == null) { 
  9.                     taskTracker.decrease(); 
  10.                 } 
  11.             } else { 
  12.             //解决服务器端重启后,客户端不能成功连接androidpn服务器 
  13.             runTask(); 
  14.                 taskList.add(runnable); 
  15.             } 
  16.         } 
  17.         Log.d(LOGTAG, "addTask(runnable)... done"); 
  18.     }

后续:

今天公司终于把Androidpn服务器端部署到服务器端了,终于真正的上线了.

大体步骤如下:

1,把服务器的程序通过myeclipse到处war包,然后访问tomcat首页,把war包上传到tomcat服务器.

点击 Tomcat Manager出现如下界面:

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

 

  1. <role rolename="manager-gui"/> 
  2. <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的一些问题

1,如果把客户端的随机生成的UUID代码,改成把设备的id或者mac(device/mac)作为用户名,会出现重复插入的错误.

2,把客户端的数据清除(或者重新安装),那么sharedPre里的数据也会没有,然而服务器端又有我们手机的设备id,然后启动程序又会出现重复插入的问题.

所以解决方案为,在服务器端保存用户的时候,检查数据时候存在该用户.

因为在客户端来说自己有没有注册到服务器端,通过SharedPreferences里面是否存在username和password.

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

其他的推送方案 : 

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

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

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

4> 也可以通过MQTT协议来实现推送 . 

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

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

责任编辑:闫佳明 来源: oschina
相关推荐

2019-09-04 09:26:42

谷歌Android开发者

2021-11-05 15:28:55

TensorFlow数据机器学习

2012-05-06 08:36:54

iOS

2010-06-08 13:29:43

微软Web版Offic

2023-05-05 18:42:20

iOS苹果iOS 16.5

2014-11-13 09:59:39

Android 5.0GoogleLollipop

2012-12-14 09:17:03

Google

2021-09-30 05:39:05

微信Android 8.0腾讯

2017-01-09 10:13:53

互联网

2013-04-08 15:19:53

百度云百度

2021-09-10 10:50:24

iOS苹果系统

2014-06-25 15:14:29

WP 8.1

2021-09-02 00:06:56

Windows 11Windows微软

2018-11-09 16:11:30

摄像头

2012-06-25 17:26:38

豌豆荚Flipboard

2017-03-13 09:41:12

2014-04-23 17:21:45

Cooliris豌豆荚

2017-09-20 07:13:28

苹果iOS

2016-11-11 08:00:27

微软Windows 10更新

2013-05-14 10:41:23

Firefox火狐浏览器
点赞
收藏

51CTO技术栈公众号