1. 为什么选择XMPP

XMPP(Extensible Message and presence Protocol)协议的出现,实现了整个及时通信服务协议的互通。

有了XMPP这个协议之后,使用任何一个组织或者个人提供的即使通信服务,都能够无障碍的与其他的及时通信服务的用户进行交流。例如google 公司2005年推出的Google talk就是一款基于XMPP协议的即使通信软件。

目前支持XMPP协议的即时通讯工具有Gtalk、FaceBook IM、Twitter、网易POPO等等通讯工具。

XMPP(www.xmpp.org)由Jabber软件基金会开发,最早在Jabber上实现。Jabber项目由Jeremie Miller在1998年开始的一个免费、开源的项目,用于提供给MSN、Yahoo!的IM服务。由于XMPP是一种基于XML架构的开放式协议,在IM通讯中被广泛采用。

XMPP的基础部分已经在2002-2004年得到了互联网工程任务组(IETF)的批准, 这意味着XMPP在将来就像我们认为理所当然的Internet协议TCP/IP、HTTP、FTP、SMTP、POP一样成为Internet标准;这 意味着以后我们就像使用Web、使用Email和使用FTP一样开放地使用IM。甚至若干年后人们会理所当然地认为163的邮箱可以给Hotmail发邮 件一样,QQ用户也可以添加Gtalk用户,人们会逐渐忘却当年军阀割据纷乱的历史。这是一种革命性的进步!

开放的标准协议会导致产品的竞争更为健康和良性,整个产业链更为完善。当然产品之间的竞争唯 一的趋势就是同质化,产品发展到后期比拼的只有服务。这一点在传统产业已经被完全验证,互联网产业也不能逃脱。

2. XMPP协议概述

XMPP(eXtensible Messaging and Presence Protocol) 是一种基于XML的近端串流式即时通信协议。它将现场和上下文敏感信息标记嵌入到XML 结构化数据中, 使得人与人之间、应用系统之间以及人与应用系统之间能即时相互通信。XMPP 协议已被批准为互联网即时通信协议标准。

3. XMPP协议内容

XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。

4. XMPP协议特点

(略)

5. XMPP协议缺点

(略)

6. XMPP系统特点

客户机/服务器通信模式、分布式网络、简单的客户端、XML的数据格式。

7. XMPP系统服务端Openfire

Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议。您可以使用它轻易的构建高效率的即时通信服务器.

Openfire安装和使用都非常简单,并利用Web进行管理。单台服务器可支持上万并发用户。

由于是采用开放的XMPP协议,您可以使用各种支持XMPP协议的IM客户端软件登陆服务.


1.Description: Project has no project.properties file! Edit the project properties to set one.; Resource: Jabberoid; Path: ; Location: Unknown; Type: Android Target Problem.

从其他android工程copy文件project.properties过来,refresh/clean后还会出现该问题,经过百度提示重启eclipse,该问题消失。

参考:http://bbs.csdn.net/topics/380242596

2.Failed to load Main-Class manifest attribute from E:\XMPP研究\spark-0.9.9.4-SNAPSHOT\spark-0.9.9.4-SNAPSHOT.jar

待解决

3.下载spark相关文件,在eclipse新建java工程,将原码copy进来,编译没有错误。

spark原码和spark-dependencies的版本必须保持一致,否则编译会出错。

spark-0.9.9.3-SNAPSHOT

spark-dependencies_0.9.9.3_and_newer.zip



Jabberoid Settings

1. Manage Jabber Account

(1) Jabber ID

(2) Password

(3) Resource Name: Identifier if you have several places from where you login.

(4) Resource Priority

2. Connection Settings

(1) Override Server Location

(2) Server Port

(3) Use SASL

(4) Use TLS

(5) Allow Plaintext Password Authenticate

3. Privacy

(1) Hide System Information

(2) Send notifications

(3) Log messages


程序包名:uk.ac.napier.android.jabberoid

Jabberoid主页main.xml按照UI内容分以下几部分

1. 状态列表(Online, Away, Extended Away, Do not disturb, Free for chat, Offline)

2. 三个按钮(Setting, Add a new user, Set your status message)

3. 联系人列表(树叶是contact,树枝是group)

Jabberoid主页java文件Jabberoid.java主要有实现以下几个逻辑

方法fetchGroups从数据表groups中获取groupName。

方法fetchContacts + fetchGroupEntries从数据库表groups和buddies中获取jid等。


参考资料:

1.基于XMPP协议的手机多方多端即时通讯方案

http://www.cnblogs.com/luxiaofeng54/archive/2011/03/14/1984026.html

2.Openfire的安装和配置

http://www.cnblogs.com/hoojo/archive/2012/05/17/2506769.html

3.Jabber/XMPP Client for Android

http://code.google.com/p/jabberoid/

4.jabberoid

http://jabberoid.googlecode.com/svn/trunk/

5.百度文库:jabber协议

http://wenku.baidu.com/link?url=dXDEzZeGdJg6KIHkk4JLwFBalABxtpd4qyr-lMQLn6oMCEBx6EWRX7yvdbkPT-6RU0bMpfACCnx3-n28RF6YLxxrNsVK1V2K7oTFQfSf0pm

6.基于Jabber协议的P2P通讯系统

http://wenku.baidu.com/link?url=dXDEzZeGdJg6KIHkk4JLwFBalABxtpd4qyr-lMQLn6oMCEBx6EWRX7yvdbkPT-6RFI73Qmeq9Ok4GQZB2Tn7i6PjmG8SQWdr9wIBncz1FTC

7.用基于XML的即时消息开发Jabber

http://wenku.baidu.com/link?url=dXDEzZeGdJg6KIHkk4JLwFBalABxtpd4qyr-lMQLn6oMCEBx6EWRX7yvdbkPT-6RrLAbSi44mujYWIHStvKa2AFju1oooIxUeYnM30v84fS

8.XMPP的总体架构和Jabber ID

http://www.douban.com/note/31142196/

9.Spark for java. A sinatra inspired framework for java

http://code.google.com/p/spark-java/

10.openfire客户端文件传输学习札记

http://www.myexception.cn/open-source/430860.html

11.Ignite Realtime

Ignite Realtime is the community site for the users and developers of Jive Software's open source Real Time Communications projects. Your involvement is helping to change the open RTC landscape.

http://www.igniterealtime.org/

http://www.jivesoftware.com/