基于Openfire Smack开发即时通讯应用、Spark安装,注册,登录,退出登录(二)

时间:2022-10-23 12:49:17

上一篇已经把服务器的Openfire环境搭建好了,现在我们就可以来搭建应用App的环境了这样就可以使用Smack的API来与服务器进行通信了。

一:继续去igniterealtime下载Smack的jar包和Spark.exe

基于Openfire Smack开发即时通讯应用、Spark安装,注册,登录,退出登录(二)

二:Spak,第一次使用需要设置点东西,不然登录不上。

基于Openfire Smack开发即时通讯应用、Spark安装,注册,登录,退出登录(二)

  1. 点击进入高级,将倒数第三,第二个勾上这样就可以登录了(至于为什么自己领悟吧 ^_^)
    基于Openfire Smack开发即时通讯应用、Spark安装,注册,登录,退出登录(二)

  2. 现在我们随便登录一个帐号,域名填写你服务器的ip地址(要是没有可以进入后台手动创建一个)
    基于Openfire Smack开发即时通讯应用、Spark安装,注册,登录,退出登录(二)

  3. 安装好了这个,在开发的时候就非常方便测试了。

三:应用开发所需要的jar包(缺一不可^_^)

基于Openfire Smack开发即时通讯应用、Spark安装,注册,登录,退出登录(二)

jxmpp的两个jar包igniterealtime官网并没有下载,这里给出下载链接jxmpp

四:搞了这么久终于可以开始敲代码了,先来个登录:

这里有几点需要注意的地方:

  1. XMPPTCPConnection connection //全局就只能有一个,所有的操作基本上都是基于connection
  2. 由于使用的是TCP连接,所以还得保证connection不死所以最好就放在服务中进行
  3. 第一步就是让你的应用连接上Openfire服务器

private XMPPTCPConnection connection;
/**
* 获得与服务器的连接
*
* @return
*/

public XMPPTCPConnection getConnection() {
try {
if (connection == null) {
XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
//服务器IP地址
.setHost("119.29.193.12")
//服务器端口
.setPort(5222)
//服务器名称(管理界面的 主机名)
.setServiceName("izqhrnmkjn55syz")
//是否开启安全模式
.setSecurityMode(XMPPTCPConnectionConfiguration.SecurityMode.disabled)
//是否开启压缩
.setCompressionEnabled(false)
//开启调试模式
.setDebuggerEnabled(true).build();
connection = new XMPPTCPConnection(config);
connection.connect();
}
return connection;
} catch (Exception e) {
e.printStackTrace();
}
return connection;
}

四:注册用户,Map中对应一些用户资料;由于方法没有返回值所以操作是否成功就看会不会抛异常若不会则成功了。

   /**
* 创建一个新用户
*
* @param username 用户名
* @param password 密码
* @param attr 一些用户资料
* @see AccountManager
*/

public boolean registerAccount(String username, String password, Map<String, String> attr) {
AccountManager manager = AccountManager.getInstance(connection);
try {
if (attr == null) {
manager.createAccount(username, password);
} else {
manager.createAccount(username, password, attr);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

attr对应的一些属性值 name;email;first;last;city;state;zip;
phone;url;date;misc;text;remove(可以查看AccountManager中的getAccountAttributes()函数注释)

五: 登录操作,查看结果同上。

    /**
* 登录
*
* @param userName 用户名
* @param password 密码
*/

public void login(final String userName, final String password) {
new Thread(new Runnable() {
@Override
public void run() {
try {
connection.login(userName, password);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}

六:退出登录

    /**
* 退出登录
*
* @return code
* @code true 退出成功
* @code false 退出失败
*/

public boolean logout() {
try {
connection.instantShutdown();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}

七:修改用户密码

    /**
* 修改密码
*
* @param newPassword  新密码
* @return code
* @code true 修改成功
* @code false 修改失败
*/

public boolean changePassword(String newPassword) {
try {
AccountManager manager = AccountManager.getInstance(connection);
manager.changePassword(newPassword);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

结语:Smack的Api还是相对比较简单的,这个版本的Api基本上都是使用的单例模式所以也非常好些