《Smack 開發總結(一)管理連線》
轉載請註明來自 傻小孩b(gold.xitu.io/user/57e089…喜歡的可以關注我,不定期總結文章!您的支援是我的動力哈!
對於最新的Smack 4.1.8版本,本質上變化還是蠻大的。包括管理連線,好友管理,會話管理等。筆者最近和朋友一起整理最新版的smack應用,並且也準備記錄下開發總結,開發學習路上,共勉~
##管理連線
4.1.8版本的Smack,變化比較大的其中之一就是管理者連線,從官方文件裡面我們可以看出,管理連線變成了構建者模式去構建一個連線配置。主要在體現在類org.jivesoftware.smack.XMPPConnection
管理你的XMPP伺服器的連線,預設實現類為org.jivesoftware.smack.XMPPTCPConnection。
程式碼如下所示:
(一) 構建連線 XMPPTCPConnection
XMPPTCPConnectionConfiguration connectionConfiguration = XMPPTCPConnectionConfiguration.builder()
.setHost(this.server)
.setPort(this.port)
.setServiceName(this.server)
.setSendPresence(true)// support presence
.setConnectTimeout(1000 * 10)
.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)//越過證照
.build();
XMPPTCPConnection mConnection = new (connectionConfiguration);複製程式碼
####(二) 啟動連線、進行回撥監聽
mConnection.addConnectionListener(new ConnectionListener() {
@Override
public void connected(XMPPConnection connection) {
LogTool.d("connected ,isExcuLogin :" + isExcuLogin);
mConnection = (AbstractXMPPConnection) connection;
//連線成功回撥
}
@Override
public void authenticated(XMPPConnection connection, boolean resumed) {
LogTool.d("authenticated");
// 登入鑑權回撥
}
@Override
public void connectionClosed() {
LogTool.d("connectionClosed");
//連線被關閉回撥
}
@Override
public void connectionClosedOnError(Exception e) {
//連線被關閉出現異常回撥
}
@Override
public void reconnectionSuccessful() {
LogTool.d("reconnectionSuccessful");
// 重新連線成功回撥
}
@Override
public void reconnectingIn(int seconds) {
LogTool.d("reconnectingIn");
// 重新登入成功回撥
}
@Override
public void reconnectionFailed(Exception e) {
LogTool.d("reconnectionFailed " + e.getMessage().toString());
// 重新連線失敗回撥
}
});複製程式碼
(三)管理登入
登入操作入口有兩種方式:1、在構建XMPPTCPConnection 的時候先傳入賬號密碼,當連線成功的時候會自動進行授權登入 2、連線成功的前提,可以直接通過呼叫XMPPTCPConnection的login()方法進行登入
1、構建時,自動登入
XMPPTCPConnectionConfiguration connectionConfiguration = XMPPTCPConnectionConfiguration.builder()
.setHost(this.server)
.setPort(this.port)
.setServiceName(this.server)
.setSendPresence(true)// support presence
.setUsernameAndPassword("賬號","密碼") // 只要構建的時候傳入即可
.setConnectTimeout(1000 * 10)
.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)//越過證照
.build();複製程式碼
2、呼叫Login()進行登入
try {
this.mConnection.login(account,password);
} catch (Exception e) {
getmLetterListener().sendHandlerLetter(SnakeServiceManager.HANDLER_CODE_LOGIN_FAILED,e);
}複製程式碼
預設情況的時候,我們會呼叫`ConnectionConfigurationd例項的setReconnectionAllowed(boolean)
會方法,這將會在連線斷開失敗的時候,進行重新連線。當然你手動進行連線也是可以的,呼叫AbstractXMPPConnection 例項的connect()方法將嘗試建立一個新的連線。
傻小孩b mark共勉,寫給在成長路上奮鬥的你