1. 程式人生 > >android 使用xmpp smack openfire實現即時通訊(一)

android 使用xmpp smack openfire實現即時通訊(一)

介紹:

XMPP :XMPP(可擴充套件訊息處理現場協議)是基於可擴充套件標記語言(XML)的協議,它用於即時訊息(IM)以及線上現場探測。 

smack:是一個開源包,易於使用的XMPP(jabber)客戶端類庫

openfire :作為伺服器提供服務。

openfire 安裝:

服務下載地址:http://www.igniterealtime.org/projects/openfire/

安裝配置過程https://mp.csdn.net/postedit/84329302

Spark

下載地址:https://spark.en.softonic.com/

spark是一個即時通訊客戶端可使用spark,可以用來測試openfire安裝是否有效,如果有信心,可以不用測試。

如果安裝後登陸不上,可以參考:https://blog.csdn.net/oniejianjun/article/details/72673782

 

有了伺服器後我們就可以編寫安卓客戶端來連線這個伺服器登陸了

1、在gradle中配置smack所需要的包。

compile 'org.igniterealtime.smack:smack-android:4.1.4'
compile 'org.igniterealtime.smack:smack-tcp:4.1.4'
compile 'org.igniterealtime.smack:smack-im:4.1.4'
compile 'org.igniterealtime.smack:smack-extensions:4.1.4'

2、測試連線類MyXMPPTCPConnection

public class MyXMPPTCPConnection extends XMPPTCPConnection {
    private static MyXMPPTCPConnection connection;

    private MyXMPPTCPConnection(XMPPTCPConnectionConfiguration config) {
        super(config);
    }

    public static synchronized MyXMPPTCPConnection getInstance() {
        //初始化XMPPTCPConnection相關配置
        if (connection == null) {
            XMPPTCPConnectionConfiguration.Builder builder = XMPPTCPConnectionConfiguration.builder();
            //設定連線超時的最大時間
            builder.setConnectTimeout(10000);
            //設定登入openfire的使用者名稱和密碼
            builder.setUsernameAndPassword("admin", "admin");
            //設定安全模式
            builder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
            builder.setResource("Android");
            //設定伺服器名稱
            builder.setServiceName("127.0.0.1");
            //設定主機地址
            builder.setHost("192.168.10.104");
            //設定埠號
            builder.setPort(5222);
            //是否檢視debug日誌
            builder.setDebuggerEnabled(true);
            connection = new MyXMPPTCPConnection(builder.build());
        }
        return connection;
    }
}

其中:builder.setHost("192.168.10.104");是本機的ip,你可以在cmd命令中輸入ipconfig查詢自己的ip。還有一點需要注意的是,我用的本地電腦配的openfire伺服器。之前我用真機測試一直報錯,連線超時,因為不在一個區域網,用模擬器測試就沒有問題。

2、主函式測試連線:

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new Thread(new Runnable() {
            @Override
            public void run() {
                MyXMPPTCPConnection connection = MyXMPPTCPConnection.getInstance();
                try {
                    connection.connect();
                    Log.i("test==", "connect");
                    connection.login();
                    Log.i("test==", "login");
                } catch (Exception e) {

                }
        }).start();
    }
}

注意:1、主執行緒直接訪問,會報錯,需要新啟動一個執行緒。2、記得為app申請網路許可權

 

 

如何判斷登入成能,在openfire伺服器的管理介面:http://127.0.0.1:9090/user-summary.jsp

中看到自己的頭像綠了(感覺那裡不對),處於登入狀態