`
crking32
  • 浏览: 14418 次
社区版块
存档分类
最新评论

androidpn研究成果

阅读更多

     前段时间,我们手上的项目需要进行android手机端的数据通信和推送。众所周知,目前安卓还没有一个固定完美和简略的框架,不像iphone。我是负责做这一块,刚开始的时候也是一头雾水,两眼发空。在网上疯狂的百度谷歌,浏览器里收藏了一堆的网页。不过经过半个月的努力钻研,总算是把androidpn这个东东完美整合到自己的项目中。

     好吧,废话不多说了。

     我是实用主义者,关于androidpn的技术核心,所用技术以及具体的框架结构之类的,大家可以百度,一抓一大把。

     我前期主要是看以下两篇日志。

     第一篇,关于下载androidpn服务端和客户端,并且实现第一个demo。这一块web推送的具体步骤,这篇日志里写的非常详细。

        http://www.devdiv.com/thread-101586-1-1.html

        需要补充一句的就是,这里下载的server端不是tomcat版本的,而是jetty框架。需要tomcat版本的,往下看。

      第二篇,关于将server端转化为tomcat版本,并且实现服务端重启后,客户端自动连接。

      http://www.iteye.com/topic/1117043#2266007

      有兴趣的朋友也可以看看这哥们其他相关博文。他从理论和实际结合上分析的非常棒。

      

       基本上,我就是靠这两篇日志,一点一滴的摸索着,并且将项目完成的。具体的理论我不再追诉,就说说我遇到的问题以及解决办法吧。

      首先,基础中的基础,就是按照第一篇日志中所说,使用模拟器完成web推送。这一块非常简单,按照第一篇去做完全可行,可能出错的地方就是你忘记更改配置文件了。

      后来我下载了第二篇日志中博主提供的tomcat版本服务端,放在自己本机tomcat下,并且启动。用模拟器去测试发现无法推送,配置文件也没有错。检查后发现,原来自己tomcat的端口是8080,而server中配置的是7070。只要打开config.properties,修改admin.console.port=端口号,即可。

      再接着,用同一个局域网内其他机子的客户端模拟器进行测试,只要将androidpn.properties中的xmppHost=服务端所在内网IP就可以啦。比如192.168.1.150。

         用真机测试,其实和模拟器没啥区别,只要配置文件不写错,原则是不会出问题的。但是我测试的时候,还是出现无法推送成功的问题。仔细检查后,原因有二。

      1.客户端android版本太低,换个android4.0版本就可以。貌似是不兼容低版本。

      2.真机上其他的应用中,也有应用到这个androidpn的。其中,在androidpn.properties中,apikey默认是123456789。因为那个应用和我自己本机都选择了默认的,所以我将自己这里的apikey改掉了。切记!这里有一点需要注意的,客户端androidpn.properties中更改了apikey,服务端config.properties也要随之修改。!!

      OK,基本上单独的web推送就完成了。

      接下来就是整合到自己项目中,也就是从自己项目后台将数据推送到客户端,至于androidpn的server端,则作为中间的桥梁。

      这里需要注意一点,androidpn会在你本地数据库中新增一个表apn_user。如果你本地数据库有权限,拒绝的话,你最好自己先手动增加这么一张表。

      首先,我单独启动一个新的tomcat,将server端部署到这下面,修改配置文件config。properties,jdbc.properties。jdbc.properties这个文件是配置你本地数据库的参数的,不能有错。启动后,简单测试成功,在自己项目中使用http协议将数据POST到server端这个org.androidpn.server.console.controller.NotificationController类的send方法中。具体参数名称及获取参数的代码,可以修改server端。

      在这里插一句,不论时间多么紧张,至少你得追一边代码,尤其这个类。

      代码写好后可以执行,断点跟踪下,只要你代码正确,配置文件没错,是可以正常推送的。

        基本上,写到这里的话,应该可以满足项目需求了。如果你还需要将哪些用户在线的功能整合到你自己项目中。那你就得自己跟踪下代码了。

      我项目做到这里,基本上都是在windows环境下。将项目部署到linux环境下,又出问题了。

      路径问题比较容易坚决,按照后台日志中提示的地方,将路径修改下。

      关键是在linux下重启server端,会发现报错,5222端口被占用。因为时间限制,能力有限,没办法修改代码,只能每次重启时,都先用命令将5222端口杀掉。

     

 

      OK。基本上我写的就是这么多,还有些小细节的问题,也来不及写。以后又时间再和大家分享吧。我反正是觉得,这个东西其实也不是特别难,只要花费时间,一点点的去看,会弄懂的。
     还有一点啊,如果大家是整合到自己项目中,最好把后台NotificationController对应的jsp给替换掉,免得被人登陆上,随意群发

9
1
分享到:
评论
13 楼 bobo52667171 2013-11-20  
您好,能不能具体说说怎么整合到自己项目的呢
12 楼 crking32 2013-03-07  
adminelco 写道
楼主 :

在自己项目中使用http协议将数据POST到server端这个org.androidpn.server.console.controller.NotificationController类的send方法中。


这快 能说详细点不 。 和你一样, 往项目中进行整合。

String url = "http://xxxxx./notification.do?action=send"

NameValuePair[] data = {new NameValuePair("username", UUID),
new NameValuePair("broadcast", "N"),
new NameValuePair("title", userName),
new NameValuePair("message",msgText),
new NameValuePair("uri",uri),
new NameValuePair("remindType",remindType)};
new PostHttp().methodPost(url, data);
11 楼 337240552 2012-10-25  
这里是我整理的tomcat版的androidpn 我在本地测试是ok 的 需要的可以下载看看http://marspring.mobi/androidpn-msg-push/
10 楼 wenjiefeng 2012-10-13  
你好,在andrioidpn-client客户端源码里,NotificationDetailsActivity这个类里,下面的参数都是什么意思呢
Intent intent = getIntent();
String notificationId = intent
.getStringExtra(Constants.NOTIFICATION_ID);
String notificationApiKey = intent
.getStringExtra(Constants.NOTIFICATION_API_KEY);
String notificationTitle = intent
.getStringExtra(Constants.NOTIFICATION_TITLE);
String notificationMessage = intent
.getStringExtra(Constants.NOTIFICATION_MESSAGE);
String notificationUri = intent
.getStringExtra(Constants.NOTIFICATION_URI);

疑惑1、 这几个参数代表什么意思呢, notificationId; notificationApiKey; notificationTitle; notificationMessage; notificationUri;
我看源码里好几处都用到这几个参数 ,

疑惑2、 现在服务端已经能将消息推送到服务端了并增加了一些参数,推送的消息里增加了距离distance等参数,该在客户端的哪个类里获取这些值呢
我的QQ号是  1297234270

谢谢
9 楼 ysy7116 2012-09-05  
哥们,是否方便把你第二篇日志中的那份代码发给我一下。
原文作者的115网盘无法下载,我联系不到原作者。希望能帮个忙哈。
我的邮箱是short7116@gmail.com
8 楼 九月光 2012-09-05  
碉堡了,受教     
7 楼 齐娜娜 2012-08-18  
楼主写得非常好,我最近也在研究这个,方便加你QQ么?
6 楼 adminelco 2012-07-05  
adminelco 写道
楼主 :

在自己项目中使用http协议将数据POST到server端这个org.androidpn.server.console.controller.NotificationController类的send方法中。


这快 能说详细点不 。 和你一样, 往项目中进行整合。

最好贴出代码来。
5 楼 adminelco 2012-07-05  
楼主 :

在自己项目中使用http协议将数据POST到server端这个org.androidpn.server.console.controller.NotificationController类的send方法中。


这快 能说详细点不 。 和你一样, 往项目中进行整合。
4 楼 crking32 2012-04-23  
sf_molice 写道
请问我下载了服务端源代码包,进行修改后,怎么将其运行到服务器上呢?
也即是说,不知道怎么将androidpn-server-0.5.0-src变成androidpn-server-0.5.0-bin?第一次接触java项目,不太了解

你可以直接下载androidpn-server-0.5.0-bin
3 楼 crking32 2012-04-23  
689guoxin 写道
  直接打成war包放在tomcat下不能运行啊。报了一堆错误,高人能加qq指点下吗?306696231

报的啥错啊
2 楼 689guoxin 2012-04-02  
  直接打成war包放在tomcat下不能运行啊。报了一堆错误,高人能加qq指点下吗?306696231
1 楼 sf_molice 2012-03-23  
请问我下载了服务端源代码包,进行修改后,怎么将其运行到服务器上呢?
也即是说,不知道怎么将androidpn-server-0.5.0-src变成androidpn-server-0.5.0-bin?第一次接触java项目,不太了解

相关推荐

Global site tag (gtag.js) - Google Analytics