`
Jclick
  • 浏览: 189112 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用Androidpn进行推送(一)

 
阅读更多

 

       最近在研究Android的推送,这里主要要讲的用XMPP协议进行android的推送。

       Androidpn的全称是android push notification。它一个android推送的开源框架,客户端用到的是asmack,是一个XMMP协议的实现。服务器端用了spring  hibernate进行页面展示,主要是用来显示和服务器建立连接的用户,以及消息的推送。如下图:


       官方的代码实现是用的Jetty来代替tomcat实现的,刚拿到官方代码时,一头雾水,费了一天的时间了解了服务器端的整体构建,然后进行重构。首先把羡慕部署在tomcat上,编译会发现出了很多错误,然后进行整改,删除一些和tomcat重复的包,然后删掉jetty等等等等,具体细节就不阐述了。整改成功后,测试可用,今天开始研究androidpn服务器端的源代码,其实本来我不太了解XMPP协议的,经过这几天的学习,大概明白一点了。下面开始讲解下androidpn中的几个关键类。

       首先登场的当然是和客户端简立连接的类了。是在org.androidpn.server.xmpp.net下的Connection类里,如下是它其中的字段:

public class Connection {

    private static final Log log = LogFactory.getLog(Connection.class);

    private IoSession ioSession;

    private Session session;

    private ConnectionCloseListener closeListener;

    private int majorVersion = 1;

    private int minorVersion = 0;

    private String language = null;

    private TLSPolicy tlsPolicy = TLSPolicy.optional;

    @SuppressWarnings("unchecked")
    private static ThreadLocal encoder = new ThreadLocalEncoder();

    private boolean closed;

 

 

其中iosesion引用的MINA框架中的一个类,它是MINA中所有session类的顶级接口,它是线程安全的,其中定义了一些客户端的端口 地址等属性信息,主要是用来保存服务器和客户端之间建立连接的一些信息。MINA是一个socket框架,主要是为了多线程管理socket的出现的,有兴趣的朋友可以看一看。

       Session是一个抽象类,也是自定义的,主要是描述一些服务器和客户端的信息。Majorversionminorversion指的是主版本和副版本。

       Tlspolicy指的是传输协议的策略,是一个枚举类型,分为三种required,optional,disabled.

 

       Encoder主要是来定义编码的,这里用的是utf8

       在这个类里,还有一个ClientAuth,也是枚举类型,主要是用来表示客户端是否需要验证。它主要的功能是用来建立连接,定义了一下发送数据到客户端的方法,还有就关闭连接的时候绑定监听器进行处理。

       今天好晚了,明天继续

 

 

 

  • 大小: 33.4 KB
4
1
分享到:
评论
18 楼 Jonathan樊 2014-04-25  
sekone 写道
你好,我运行网上下来的androidpn bin目录下的 run.bat 一闪而过 打开 http://127.0.0.1:7070/index.do 无法访问 是什么原因啊?我的jdk 版本:1.6.0_26

请问你这个问题解决了吗?我也遇到了同样的问题
17 楼 butter 2012-10-10  
liuweisir 写道
Jclick 你好,我下了一个tomcat版的androidpn的源码,部署之后启动报错:
Error creating bean with name 'urlMapping' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml] 不知道是不是缺少文件,麻烦你发给我一份服务端源码,谢谢!


我也遇到这个错误,有解决办法吗?
16 楼 zsxsilence 2012-06-20  
万分感谢牛人的分享,帮了很大的忙。然后再劳烦牛人帮忙解答一下 openfire和androidpn有啥关系?他们之间的主要区别是啥?还有androidpn能够支持多大的用户量并发?有没有参考性的数据?再次感谢
15 楼 454281995 2012-04-03  
启动服务端  是否只改jdbc.properties 就可以了, 我该了这个老是连不上数据库
14 楼 androidzjb 2012-03-07  
改了一天没改成,能说一下具体删除那些jar包吗?
13 楼 cdztop 2012-02-26  
请问一下,怎么启动服务器端的代码呢?

我是把服务器端的代码复制到tomcat的webapps这个目录下,然后启动tomcat。
在IE里输入:http://localhost:8080/Androidpn/WebRoot/index.jsp

结果出现下面的错误:



HTTP Status 500 -
--------------------------------------------------------------------------------
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: /WebRoot/index.jsp (line: 2, column: 1) File "/includes/taglibs.jsp" not found
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:42)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:408)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:133)
org.apache.jasper.compiler.Parser.processIncludeDirective(Parser.java:322)
org.apache.jasper.compiler.Parser.parseIncludeDirective(Parser.java:357)
org.apache.jasper.compiler.Parser.parseDirective(Parser.java:467)
org.apache.jasper.compiler.Parser.parseFileDirectives(Parser.java:1777)
org.apache.jasper.compiler.Parser.parse(Parser.java:135)
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:242)
org.apache.jasper.compiler.ParserController.parseDirectives(ParserController.java:119)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:193)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:373)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
12 楼 mazhi4562qq 2012-02-17  
你好,麻烦问下androidpn能推送信息,那能推送软件吗?
11 楼 yuyoubin 2012-02-15  
你好!由于项目需求要做推送功能,可否麻烦你传一个tomcat版本的 给我学习下 ? QQ:258306700 盼复。 谢谢!
10 楼 auqyvpl 2012-02-06  
请问在哪了下载tomcat版本呢
9 楼 sekone 2011-12-22  
你好,我运行网上下来的androidpn bin目录下的 run.bat 一闪而过 打开 http://127.0.0.1:7070/index.do 无法访问 是什么原因啊?我的jdk 版本:1.6.0_26
8 楼 wuzhi11love 2011-12-21  
把客户端的xmppHost改为服务器的ip就可以访问服务器了
7 楼 tengyun_20 2011-11-24  
现在index.jsp有变成跳转404的问题莫名其妙的好了。但是,现在的问题,以往通过.do的方式访问仍然不行,抛出一堆异常。点击tab上的home显示异常的页面,点击user、session、Notifications则是400。求解决方式啊……呜
6 楼 tengyun_20 2011-11-24  
楼主啊,有个问题,就是我用你的自己改动的版本,在tomcat6.0.13下运行,index无法显示,返回的是404直接就到404.jsp了。我想问下可能是什么问题啊?请问网上下的run.bat启动的那个服务器连接正常,那怎么从jetty的改动到tomcat呢?真心希望楼主有个教程,网上相关也没有……
5 楼 liuweisir 2011-11-23  
Jclick   你对androidpn这块研究的挺深的,希望你能建个专门研究push的群,把好的经验分享给大家。
4 楼 liuweisir 2011-11-23  
Jclick 你好,我下了一个tomcat版的androidpn的源码,部署之后启动报错:
Error creating bean with name 'urlMapping' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml] 不知道是不是缺少文件,麻烦你发给我一份服务端源码,谢谢!
3 楼 Jclick 2011-11-11  
xytdman 写道
上面的问题已经解决,是我客户端AVD的问题,我对client的IP进行更新了,但是AVD中的没有被更新,我还想请教一个问题,我通过什么软件或什么方式能获得服务器端与客户端通信的数据(主要是通信的xmpp内容)?麻烦你给个回复,我现在只能在日志中看到消息体的内容,用IQ根标记的那个内容。


所有的通讯内容都可以在XMLLightweightParser中的read方法中看到(服务器端的openfire.nio包里),而如果只想看消息的内容,都在/Androidpn/src/org/androidpn/server/xmpp/net/XmppIoHandler.java中messageReceived(IoSession session, Object message)里边。可以看看
2 楼 xytdman 2011-11-11  
上面的问题已经解决,是我客户端AVD的问题,我对client的IP进行更新了,但是AVD中的没有被更新,我还想请教一个问题,我通过什么软件或什么方式能获得服务器端与客户端通信的数据(主要是通信的xmpp内容)?麻烦你给个回复,我现在只能在日志中看到消息体的内容,用IQ根标记的那个内容。
1 楼 xytdman 2011-11-10  
您好,看了您的一些服务端推送的一些文章,写的非常不错 ,确实对我受益匪浅,在这里表示感谢,还想请教您一个问题,下了一个您提供的tomcat版本的androidpn服务器端,运行起来以后发现只能与本机的客户端通讯,不能与部署到其他电脑上的客户端通信,客户端已经修改过raw目录下androidpn.properties,xmppHost设置了正确的IP,但是非本机的客户端就是连接不上服务器,尝试用jetty版的服务端连接非本机客户端,可以联通,请问为什么?是否还需要修改tomcat的某些配置文件?

相关推荐

    androidpn服务器推送

    AndroidPN(Android Push Notification)是Android平台上的一种消息推送服务,旨在帮助开发者实现在应用程序后台时仍然能够接收服务器发送的通知或数据。在AndroidPN服务器推送的实现中,有以下几个关键知识点: 1....

    androidpn 消息推送客户端+服务器端

    AndroidPN(Android Push Notification)是一种基于XMPP协议的开源消息推送系统,专为Android平台设计。这个项目包含两部分:客户端应用和服务器端组件。在本文中,我们将深入探讨这两个部分以及它们的工作原理。 ...

    androidpn离线推送

    AndroidPN离线推送是一种在Android平台上实现的消息推送技术,它允许应用在用户设备处于离线状态时仍能接收到服务器发送的通知。这个技术的核心在于优化应用程序的通信效率,提高用户体验,尤其是在用户没有打开应用...

    著名的AndroidPN消息推送客户端

    AndroidPN(Android Push Notification)是一种基于XMPP(Extensible Messaging and Presence Protocol)协议的开源消息推送客户端,主要用于Android平台。XMPP是一种开放标准的即时通讯协议,它允许应用程序通过...

    androidpn-client推送客户端

    AndroidPN(Android Push Notification)客户端是一款专门为Android操作系统设计的应用程序,用于实现远程服务器向设备推送通知的功能。在移动应用开发中,推送通知是一项至关重要的特性,它允许应用程序在后台状态...

    androidpn消息推送

    AndroidPN(Android Push Notification)是一种基于Google Cloud Messaging (GCM) 的第三方消息推送服务,用于在Android设备上实现后台消息的实时推送。AndroidPN的主要功能是帮助开发者在应用程序不运行时,仍然...

    androidpn消息推送-tomcat版

    **AndroidPN消息推送-Tomcat版**是一种用于Android设备的消息推送系统,它利用XMPP协议实现了客户端与服务器之间的实时通讯。本系统分为客户端和服务端两大部分,采用Java语言编写,并结合了Asmack库与Openfire...

    androidpn消息推送源码

    AndroidPN(Android Push Notification)是一款基于XMPP协议的Android消息推送服务的开源项目。XMPP(Extensible Messaging and Presence Protocol)是一种实时通信协议,广泛应用于即时消息和在线状态的处理,它...

    androidpn 推送系统

    AndroidPN(Android Push Notification)是一种基于Android平台的推送通知服务,它允许开发者向用户的设备发送实时消息,即使应用在后台或完全关闭的状态下也能接收到这些消息。这种服务对于提高用户体验,保持应用...

    会议管理类应用、使用Androidpn完成推送、华为AnyOffice比赛个人组第一名。.zip

    而“使用Androidpn完成推送”指的是在开发这款应用时,采用了Android Push Notifications(AndroidPN)服务来实现远程消息推送。AndroidPN是一个开源的Android推送服务,允许开发者向用户的设备发送通知,即使应用...

    【整理】解刨AndroidPN消息推送.pdf

    在这个过程中,AndroidPN(Android Push Notification)是其中一种流行的消息推送服务解决方案,通常应用于Android平台,但也可以跨平台使用。AndroidPN项目由韩国开发者SehwanNo开发,是一个开源的项目,支持消息推...

    androidpn 消息推送 服务器端源码

    AndroidPN(Android Push Notification)是一个专门针对Android平台设计的消息推送系统,其服务器端源码的开放为开发者提供了自定义和扩展的可能性。本文将深入探讨AndroidPN服务器端源码的关键知识点,帮助开发者...

    Androidpn推送增强版

    AndroidPN(Android Push Notification)是专门为Android平台设计的一款推送服务,旨在提高应用程序的实时通信效率,减少应用在后台运行时对系统资源的占用。增强版的AndroidPN在基础功能上进行了优化,提供了更加...

    androidpn推送框架+文档

    androidpn为Android应用提供消息通知推送支持, 它本质上服务器端基于 Openfire,客户端基于 asmack,这二者都最 XMPP IM 开源实现里的二个基本组件,应该说 androidpn 只是把二者更多地结合起来用于做 Push的场景。...

    Androidpn推送

    关于服务器端向Android客户端的推送,主要有三种方式:轮询,应用程序应当阶段性的与服务器进行连接并查询是否有新的消息到达,你必须自己实现与服务器之间的通信,例如消息排队等。而且你还要考虑轮询的频率,如果...

    androidpn消息推送完善版,基于web服务器

    ### AndroidPN消息推送完善版详解 #### 一、概述 ...总结而言,AndroidPN消息推送系统是一种基于XMPP协议的高效消息推送解决方案,通过精心设计的客户端和服务端架构,能够为用户提供稳定可靠的消息推送服务。

    androidPN推送服务器

    **AndroidPN推送服务器详解** AndroidPN(Android Push Notification)是一个为Android设备提供实时消息推送服务的开源项目。它允许开发者通过服务器向安装了特定应用的Android设备发送通知,无需保持应用程序在...

    用androidpn来实现推送

    #### 二、AndroidPN推送机制概述 AndroidPN是一个开源项目,它提供了一种用于Android设备的消息推送服务。其核心优势在于采用了XMPP协议,这是一种基于XML的即时消息和在线状态协议,被广泛应用于诸如QQ、MSN和...

    AndroidPn推送

    AndroidPN(Android Push Notification)是针对Android平台设计的一种推送服务,它基于XMPP(Extensible Messaging and Presence Protocol)协议实现。XMPP是一种开放标准的即时通讯协议,广泛应用于聊天、协作和推...

Global site tag (gtag.js) - Google Analytics