天天看點

基于Xmpp,Openfire和Asmack的聊天軟體的開發(一)

最近在學習基于Xmpp的android通信軟體,現将一些關鍵的環節分享記錄在這裡。

在Openfire伺服器端配置好後,開始開發android用戶端。

(有關Openfire伺服器的搭建,可以參考Openfire 的安裝和配置)

整體架構:

基于Xmpp,Openfire和Asmack的聊天軟體的開發(一)

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和服務的關聯。就不在這裡贅述了。

下一步,我将會實作好友清單的擷取,以及發送消息,接收消息功能。