XMPP :XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。
smack:是一个开源包,易于使用的XMPP(jabber)客户端类库
openfire :作为服务器提供服务。
服务下载地址:http://www.igniterealtime.org/projects/openfire/
安装配置过程https://mp.csdn.net/postedit/84329302
下载地址:https://spark.en.softonic.com/
spark是一个即时通信客户端可使用spark,可以用来测试openfire安装是否有效,如果有信心,可以不用测试。
如果安装后登陆不上,可以参考:https://blog.csdn.net/oniejianjun/article/details/72673782。
1、在gradle中配置smack所需要的包。
compile 'org.igniterealtime.smack:smack-android:4.1.4'
compile 'org.igniterealtime.smack:smack-tcp:4.1.4'
compile 'org.igniterealtime.smack:smack-im:4.1.4'
compile 'org.igniterealtime.smack:smack-extensions:4.1.4'
2、测试连接类MyXMPPTCPConnection
public class MyXMPPTCPConnection extends XMPPTCPConnection {
private static MyXMPPTCPConnection connection;
private MyXMPPTCPConnection(XMPPTCPConnectionConfiguration config) {
super(config);
}
public static synchronized MyXMPPTCPConnection getInstance() {
//初始化XMPPTCPConnection相关配置
if (connection == null) {
XMPPTCPConnectionConfiguration.Builder builder = XMPPTCPConnectionConfiguration.builder();
//设置连接超时的最大时间
builder.setConnectTimeout(10000);
//设置登录openfire的用户名和密码
builder.setUsernameAndPassword("admin", "admin");
//设置安全模式
builder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
builder.setResource("Android");
//设置服务器名称
builder.setServiceName("127.0.0.1");
//设置主机地址
builder.setHost("192.168.10.104");
//设置端口号
builder.setPort(5222);
//是否查看debug日志
builder.setDebuggerEnabled(true);
connection = new MyXMPPTCPConnection(builder.build());
}
return connection;
}
}
其中:builder.setHost("192.168.10.104");是本机的ip,你可以在cmd命令中输入ipconfig查询自己的ip。还有一点需要注意的是,我用的本地电脑配的openfire服务器。之前我用真机测试一直报错,连接超时,因为不在一个局域网,用模拟器测试就没有问题。
2、主函数测试连接:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(new Runnable() {
@Override
public void run() {
MyXMPPTCPConnection connection = MyXMPPTCPConnection.getInstance();
try {
connection.connect();
Log.i("test==", "connect");
connection.login();
Log.i("test==", "login");
} catch (Exception e) {
}
}).start();
}
}
注意:1、主线程直接访问,会报错,需要新启动一个线程。2、记得为app申请网络权限
如何判断登录成能,在openfire服务器的管理界面:http://127.0.0.1:9090/user-summary.jsp
中看到自己的头像绿了(感觉那里不对),处于登录状态