因为Smack4.20的资料还不大多,并且很以前的方法都被替换或过时了,想记录下和大家分享下个人的经验,有问题的希望大家多多包含,在最后的篇幅中我会贴出工具类的所有代码!
Smack和Openfire就不多介绍了,博主用的是openfire4.1.3+smack4.20。
调试软件我用的是spark客户端,方便调试,官网都可以下载。
废话不多说,首先导入相应jar包,我用的IDE是android studio,所以通过gradle管理jar包是非常方便的,jar包如下:
compile "org.igniterealtime.smack:smack-android-extensions:4.2.0"
compile "org.igniterealtime.smack:smack-android:4.2.0"
compile "org.igniterealtime.smack:smack-tcp:4.2.0"
compile "org.igniterealtime.smack:smack-im:4.2.0"
public XMPPTCPConnection createConnection() {
XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration.builder();
try {
//设置openfire主机IP
config.setHostAddress(InetAddress.getByName(ApiConstants.OPENFIRE_IP));
//设置openfire服务器名称
config.setXmppDomain(ApiConstants.OPENFIRE_NAME);
//设置端口号:默认5222
config.setPort(ApiConstants.OPENFIRE_PORT);
//禁用SSL连接
config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled).setCompressionEnabled(false);
config.setDebuggerEnabled(true);
//设置离线状态
config.setSendPresence(false);
//需要经过同意才可以添加好友
Roster.setDefaultSubscriptionMode(Roster.SubscriptionMode.manual);
connection = new XMPPTCPConnection(config.build());
connection.connect();
} catch (Exception e) {
Logger.d("openfire连接失败,请检查是否开启服务器!");
e.printStackTrace();
}
return connection;
}
以前smack4之前的版本都是使用XMPPConnection,在之后我们都要XMPPTCPConnectionConfiguration来实现连接。注意,这里的变量我都是定义静态变量方便查看管理,上面都写了注释,对应的要修改过来。然后我们需要通过连接builder来设置连接信息,然后才开始建立连接。
实现了连接后我们可以开始登陆了,登陆代码如下:
public boolean login(String username, String password){
try {
if(connection == null){
connection = createConnection();
}
if(!connection.isAuthenticated()){
connection.login(username, password);
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
注意,这里的参数就是我们openfire中注册的用户名和密码,这里openfire的安装和添加用户就不多说了,网上很多资料。
就这样我们就简单的实现了smack的连接和登陆,现阶段都是比较简单的方法,下一章再重点说明发起单聊消息与消息的监听。