最近在學習基于Xmpp的android通信軟體,現将一些關鍵的環節分享記錄在這裡。
在Openfire伺服器端配置好後,開始開發android用戶端。
(有關Openfire伺服器的搭建,可以參考Openfire 的安裝和配置)
整體架構:

android用戶端通過smack與openfire伺服器進行通信,進而實作用戶端之間的通信功能。Asmack為smack在android環境下的jar包。
第一步,要建立用戶端到伺服器的連接配接。
若想實作即時通信的功能,必須要能夠實時的從伺服器擷取資訊,那麼就要能夠使得用戶端與伺服器保持長時間的連接配接,在asmack中,提供了一個XMPPConnection類來實作與伺服器保持長連接配接的功能。
具體實作如下:
private static XMPPConnection con = null;
private static void openConnection() {
try {
ConnectionConfiguration connConfig = new ConnectionConfiguration("10.105.74.254", 5222);//伺服器位址,端口号
con = new XMPPConnection(connConfig);
con.connect();//開啟連接配接
}
catch (XMPPException xe)
{
xe.printStackTrace();
}
}
XMPPConnection有兩個非常重要的函數:
xmppConnection.isConnected() :布爾值表示是否連接配接到伺服器(注意:此時使用者不一定登入);
xmppConnection.isAuthenticated() : 布爾值表示是否登入成功(即使用者名+密碼驗證通過),此時代表已登入成功,且與伺服器保持連接配接。
通過這兩個函數,就可以知道連接配接是否成功,登入是否成功。
第二步,使用者登入
XmppTool.getConnection().login(Userid, passwd);//登入(使用者名+密碼)
Presence presence = new Presence(Presence.Type.available);//狀态為線上
XmppTool.getConnection().sendPacket(presence);
Presence類位于 org.jivesoftware.smack.packet.Presence中。
Presence主要用來設定使用者狀态(線上,離線),發出添加和删除好友的資訊。由Presence中的Presence.Type屬性實作,具體含義如下:
- available: 表示處于線上狀态
- unavailable: 表示處于離線狀态
- subscribe: 表示發出添加好友的申請
- unsubscribe: 表示發出删除好友的申請
- unsubscribed: 表示拒絕添加對方為好友
- error: 表示presence資訊報中包含了一個錯誤消息。
有關連接配接與登入的關鍵功能已經實作,之後便是相應的UI的設計,以及UI和服務的關聯。就不在這裡贅述了。
下一步,我将會實作好友清單的擷取,以及發送消息,接收消息功能。