xmpp介绍
XMPP: Extensible Messaging and Presence
Protocol Detail: http://www.xmpp.org/ 可扩展消息处理现场协议, 是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。
XMPP是一个流化XML[XML]元素的协议,用于准实时的交换消息和出席信息。XMPP的核心功能定义在Extensible Messaging and
Presence Protocol (XMPP): Core XMPP-CORE. 这些功能 -- 主要是 XML流, 使用 TLS和SASL,以及流的根元素之下的<message/>,
<presence/>, 和 <iq/> 子元素 -- 为各种类型的准实时应用提供了一个构造基础, 它可以被放在核心的顶层,使用特定XML名字空间[XML-NAMES]发送特定的应用数据. 我很想描述XMPP核心功能的扩展和应用,时间关系及理解的不是很透彻,也不敢乱发言;XMPP核心功能提供了RFC 2779 [IMP-REQS]定义的基本的即时消息和出席信息功能。
XMPP中JID =(jabber id)
fullJid:
name + “@” + serverName +”resourceName”
barJid:
name + “@” + serverName
name:登录名
serverName:
是服务器的域名 如gmail.com(GTALK)
公司213服务器域名称为mm
resourceName:资源名 如Gtalk , MSN , QQ ,Spark这些名称就是资源名
注意:一个名称可以使用不同的资源名登录,所以在发送消息时接收方一定要使用fullJid
BEEM中用到的相关类
1.说明
采用开源工程beem的代码结构 www.project-beem.com
2. AIDL接口
com.zbkc.mobileoa.im.beem
service中AIDL接口:
service.aidl包 |
aidl对应的实现 |
描述 |
IBeemConncectionListener.aidl |
IXmppConnection中调用 |
添加连接监听的回调接口 |
IXmppConnection.aidl |
XmppConnectionAdapter |
用于xmpp连接处理接口 |
IXmppFacade.aidl |
XmppFacade |
用于xmpp连接管理提供外部调用接口 |
IChatManger.aidl |
BeemChatManager |
用于聊天管理 |
IChatManagerListener.aidl |
IChatManger中调用 |
为聊天加入回调接口 |
IChat.aidl |
ChatAdapter |
封装xmpp聊天处理方法 |
IMessageListener.aidl |
IChatManger中调用 IChat中调用 |
提供消息处理回调接口 |
|
|
|
|
问:为啥在提供这么多的AIDL接口?
1)一层一层封装使结构更加清晰
问:为啥封装Contact
Message UserInfo等类
在Service中如果要传递对象必须是继承自Parcelable的对象
问:RemoteCallbackList的作用
在多个类中都用到了RemoteCallbackList 主要是用于回调在Activity中实现的一些监听器
问:Avater和PrivacyList作用是什么?
Avater是头像信息
PrivacyList是用来定义更多的用户状态信息(如定义离开消息:“我吃饭去了”等)
3.service中主要的类
XmppConnectionAdapter:
Class
Over
Subscription-
Management订阅管理
Summary
Nested
Classes
XmppConnectionAdapter .ConnexionListenerAdapter
XmppConnectionAdapter .SubscribePacketListener
XmppConnectionAdapter .UserInfoManager
Public Constructors
Public Methods
方法名 |
描述 |
connect |
xmpp连接方法 |
addConnectionListener |
添加xmpp连接监听器 |
login |
xmpp登录方法 |
connectAsync |
|
updateNotification |
|
getChatManager |
|
getRoster |
|
getUserInfo |
|
isAuthentificated |
|
Inherited
Methods
XmppConnectionAdapter
.ConnexionListenerAdapter类
connectionClosed
connectionClosedOnError
connectionFailed 回调Activity中的实现
reconnectingIn 回调Activity中的实现
reconnectionFailed回调Activity中的实现
reconnectionSuccessful回调Activity中的实现
XmppConnectionAdapter .SubscribePacketListener类
Class
Over
Subscription-
Management订阅管理
Summary
Nested
Classes
Public Constructors
Public Methods
processPacket
//更换帐号登录....Subscription
Inherited
Methods
XmppConnectionAdapter
.UserInfoManager类
onAvatarChange
更换头像时调用此监听方法
XmppFacade:
Class
Over
Xmpp连接管理外部接口
Summary
Nested
Classes
Public Constructors
XmppFacade(final XmppConnectionAdapter
connection)
Public Methods
方法名 |
描述 |
void changeStatus(int status, String msg) |
修改状态信息 |
void connectAsync() |
异步登录 |
void connectSync() |
同步登录 |
XmppConnectionAdapter createConnection() |
创建xmpp连接 |
void disconnect() |
销毁xmpp连接 |
IChatManager getChatManager() |
获取聊天管理器 |
IRoster getRoster() |
返回当前用户的名册(包含好友列表信息,分组信息) |
void sendChatPacket(Message msg) |
add by jimmy
:unavailable |
void sendPresencePacket(PresenceAdapter presence) |
发送状态包(如发送离线 |
void call(String jid) |
|
boolean publishAvatar(Uri avatarUri) |
发布自己的头像 |
void disableAvatarPublishing() |
隐藏自己的头像 |
UserInfo getUserInfo() |
获取当前用户的信息 mFullJid mAvatarId |
|
|
|
|
|
|
Inherited
Methods
BeemChatManager:
Class
Over
聊天管理,用于管理聊天对象的创建,消息的监听
Summary
Nested
Classes
ChatListener extends IMessageListener.Stub
implements ChatManagerListener
Public Constructors
BeemChatManager(final ChatManager
chatManager, final XmppService service)
Public Methods
方法名 |
描述 |
addChatCreationListener |
|
|
|
IChat
createChat(Contact contact, IMessageListener listener) |
|
IChat
createChat(String jid, IMessageListener listener) |
|
void
destroyChat(IChat chat) |
|
void
deleteChatNotification |
|
private
ChatAdapter getChat(Chat chat) |
|
ChatAdapter
getChat(Contact contact) |
|
List<Contact>
getOpenedChatList() |
|
void
removeChatCreationListener(IChatManagerListener listener) |
|
|
|
|
Inherited
Methods
ChatAdapter:
Class
Over
Summary
Nested
Classes
class MsgListener implements ChatStateListener
Public Constructors
ChatAdapter(final Chat chat)
Public Methods
方法名 |
描述 |
|
getParticipant() |
|
|
sendMessage(Message
msg) |
add by
jimmy unaviable |
|
void
addMessageListener(IMessageListener listen) |
当创建新聊天对象创建时加入消息监听 |
|
void removeMessageListener(
IMessageListener listen ) |
移除消息监听器,用于聊天对象注销 |
|
String
getState() |
获取当前聊天对象的状态 |
|
void
setState(String state) |
|
|
Chat
getAdaptee() |
|
|
void
setOpen(boolean isOpen) |
如果打开为当前聊天窗口,消息条数清空 |
|
boolean
isOpen() |
|
|
void
addNewMsgNum() |
add by
jimmy 后台逻辑,与前台窗口无关,只要聊天对象存在计数器都要+1 |
|
int
getNewMsgNum() |
add by
jimmy 后台逻辑,只计算上次窗体调用setOpen(true)到当前时间所到的新消息条数 |
|
List<Message>
getMessages() |
|
|
void
addMessage(Message msg) |
|
|
void
saveHistory(Message msg, String contactName) |
根据联系人的barJid存储聊天记录 |
|
void
setHistory(boolean isHisory) |
|
|
boolean
getHistory() |
|
|
|
|
|
Inherited
Methods
4.其他类
用于选程服务中的类
RosterAdapter:用于用户名称管理
用于传递的Parcelable对象 [Parcelable:包裹]
UserInfo 登录者信息管理
Message 消息的定义
Contact 联系人定义 主要封装fulljid
用于业务层处理:
LoginAsyncTask
:xmpp异步登录处理
XMPP扩展:
两种方式:
1)采用Form表单方式直接添加
2)采用PepSub节点添加 如beem中的头像属性
参考文档:
http://xmpp.org/extensions/xep-0080.html
http://stackoverflow.com/questions/2387319/xep-0080-user-location-in-smack-library
关于文件传输问题:
参考
http://code.google.com/p/asmack/issues/detail?id=23
http://community.igniterealtime.org/message/201866#201866