android 使用xmpp smack openfire實現即時通訊(一)
阿新 • • 發佈:2019-01-13
介紹:
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
中看到自己的頭像綠了(感覺那裡不對),處於登入狀態