连接、注册、登录
开启连接
-
首先需要导入smack相关jar包,篇尾会给出,至于源码会在该系列的博客最后一篇给出来,如果有问题欢迎大家留言
-
打开连接相关API
1、XMPPTCPConnection
2、XMPPTCPConnectionConfiguration -
在开启连接时用到的就是以上两个api,下面看下如何去创建,通过查看源码我们发现创建XMPPTCPConnection时需要传入一个config对象也就是XMPPTCPConnectionConfiguration,关键也在这块,该对象里面包含了一些非常重要的方法如下:
//设置openfire主机IP
setHostAddress(InetAddress.getByName(SERVER_HOST))
//设置openfire服务器名称
setXmppDomain(SERVER_NAME)
//设置默认端口号:默认5222
setPort(SERVER_PORT)
//禁用SSL连接
setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
setCompressionEnabled(false)
//设置debug模式
setDebuggerEnabled(true)
//设置离线状态
setSendPresence(false)
//设置开启压缩,可以节省90%流量
setCompressionEnabled(true); -
连接xmpp服务的具体code
public boolean openConnection() {
try {
if (null == connection || !connection.isAuthenticated()) {
SmackConfiguration.DEBUG = true;
XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration.builder()
//设置openfire主机IP
.setHostAddress(InetAddress.getByName(SERVER_HOST))
//设置openfire服务器名称
.setXmppDomain(SERVER_NAME)
//设置默认端口号:默认5222
.setPort(SERVER_PORT)
//禁用SSL连接
.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
.setCompressionEnabled(false)
//设置debug模式
.setDebuggerEnabled(true)
//设置离线状态
.setSendPresence(false)
//设置开启压缩,可以节省90%流量
.setCompressionEnabled(true);
//需要经过同意才可以添加好友
Roster.setDefaultSubscriptionMode(Roster.SubscriptionMode.manual);
//连接服务器
connection = new XMPPTCPConnection(config.build());
connection.connect();
Log.e(TAG, "连接服务器成功");
return true;
}
} catch (XMPPException | SmackException | IOException | InterruptedException xe) {
xe.printStackTrace();
connection = null;
Log.e(TAG, "连接服务器失败");
}
return false;
}
以上基本完成连接配置并成功连接到你本地的服务。
注册
- 注册相关api
1、AccountManager - 获取AccountManager对象实例
AccountManager.getInstance(Connection conn);
- 创建账户
createAccount(account, password);
- 注册code
/**
* 注册
*
* @param account 账号
* @param password 密码
* @param attr 用户资料 attr对应的一些属性值 name;email;first;last;city;state;zip;
* phone;url;date;misc;text;remove(可以查看AccountManager中的getAccountAttributes()函数注释)
*/
public boolean register(String account, String password, Map<String, String> attr) {
try {
//获取AccountManger实例
AccountManager manager = getAccountManager();
//服务器支持创建新账户
if (manager.supportsAccountCreation()) {
if (null == attr) {
//创建账户
manager.createAccount(Localpart.from(account), password);
} else {
//创建账户并且涵盖map集合中的一些其他信息
manager.createAccount(Localpart.from(account), password, attr);
}
Log.e(TAG, "注册成功");
return true;
}
} catch (XMPPException | IOException | SmackException | InterruptedException xe) {
xe.printStackTrace();
Log.e(TAG, "注册失败");
}
return false;
}
以上是注册code
登录
-
登录相关api
1、XMPPTCPConnection -
登录
login(account, password);
-
登录code
/**
* 登录
*
* @param account 账号
* @param password 密码
*/
public boolean login(String account, String password) {
try {
getConnection().login(account, password);
Log.e(TAG, "登录成功");
return true;
} catch (XMPPException | IOException | SmackException | InterruptedException xe) {
xe.printStackTrace();
Log.e(TAG, "登录失败");
}
return false;
}
以上是登录code
----------------------------------------------------------我是分割线--------------------------------------------------------------
接下来给大家看下效果图