前言
實現功能
AndroidStudio基于openfire實現登錄注冊
1、在gradle里添加配置
compile"org.igniterealtime.smack:smack-android-extensions:4.1.0"
compile"org.igniterealtime.smack:smack-experimental:4.1.0"
compile"org.igniterealtime.smack:smack-tcp:4.1.0"
2、獲取連接對象
public classXmppManager {
private staticXMPPTCPConnectionxmppConnection;
// 域名:IP地址、服務器域名
private static finalStringHOST="192.168.0.13";//192.168.0.76
// 端口號
private static final intPORT=5222;
// 服務器名稱
public static finalStringSERVICE_NAME="192.168.0.13";
/**
* 獲取連接對象
*
*@return
*/
public staticXMPPTCPConnectiongetConnection() {
if(xmppConnection==null) {
xmppConnection=openConnection();
}
returnxmppConnection;
}
/**
* 打開連接
*
*@return
*/
private staticXMPPTCPConnectionopenConnection() {
if(!isConnected()) {
XMPPTCPConnectionConfiguration.Builder builder = XMPPTCPConnectionConfiguration
.builder()
.setHost(HOST)
.setPort(PORT)
.setServiceName(SERVICE_NAME)
.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
xmppConnection=newXMPPTCPConnection(builder.build());
try{
xmppConnection.connect();
}catch(Exception e) {
e.printStackTrace();
}
}
returnxmppConnection;
}
/**
* 判斷是否已經連接
*
*@return
*/
private static booleanisConnected() {
returnxmppConnection!=null&&xmppConnection.isConnected();
}
}
3、編寫登錄界面
4、實現注冊
XMPPTCPConnection connection = XmppManager.getConnection();
AccountManager accountManager = AccountManager.getInstance(connection);
accountManager.sensitiveOperationOverInsecureConnection(true);
Map attributes =newHashMap();
attributes.put("email",params[2]);//附加屬性可以不要
accountManager.createAccount(params[0],params[1],attributes);//創建賬號即注冊
注:注冊賬號為耗時操作
5、實現登錄
XMPPTCPConnection connection = XmppManager.getConnection();
// 登錄
connection.login(params[0],params[1]);
// 更新狀態
// available: 表示處于在線狀態
// unavailable: 表示處于離線狀態
// subscribe: 表示發出添加好友的申請
// unsubscribe: 表示發出刪除好友的申請
// unsubscribed: 表示拒絕添加對方為好友
// error: 表示presence信息報中包含了一個錯誤消息。
connection.sendStanza(newPresence(Presence.Type.available));//設置狀態