前面讲了本地如何搭建XMPP环境 其实我不懂 也没认真的好好研究原理 这肯定是要看的 不过先上手把代码拼上去 再细细debug 一点点的理解 这两篇的博客也是想帮助那些和我过去一样 认为XMPP是一个多高端多遥远的东西 我想告诉那些人的是 其实就在你手边
因为我也才接触 不敢保证代码规范 以及是否有隐藏的bug 各位如果有缘 看过有帮助就好 没有帮助笑笑就算了
这里需要使用到插件 asmack-jse.jar
首先最重要的是配置连接
public static String host = "192.168.1.101";
public static int port = 5222;
static XMPPConnection connection;
//依葫芦画瓢
static{
XMPPConnection.DEBUG_ENABLED = true;
ConnectionConfiguration configuration = new ConnectionConfiguration(host, port);
connection = new XMPPConnection(configuration);
connection.DEBUG_ENABLED = true;
ProviderManager pm = ProviderManager.getInstance();
configure(pm);
}
注意这里的host 貌似加http会出问题 应该根本就不是用的http协议吧 端口默认是5222 你可以去openfire服务器配置中查询
接下来注册和登录就好说了
注册
Registration reg = new Registration();
reg.setType(IQ.Type.SET);
reg.setTo(MainActivity.connection.getServiceName());
reg.setUsername(usernameEdt.getText().toString());
reg.setPassword(passwdEdt.getText().toString());
reg.addAttribute("android", "geolo_createUser_android");
System.out.println("reg:" + reg);
PacketFilter filter = new AndFilter(new PacketIDFilter(reg
.getPacketID()), new PacketTypeFilter(IQ.class));
PacketCollector collector = MainActivity.connection
.createPacketCollector(filter);
MainActivity.connection.sendPacket(reg);
result = (IQ) collector.nextResult(SmackConfiguration
.getPacketReplyTimeout());
// Stop queuing results
collector.cancel();// 停止请求results(是否成功的结果)
if (result == null) {
Toast.makeText(getApplicationContext(), "服务器没有返回结果",
Toast.LENGTH_SHORT).show();
} else if (result.getType() == IQ.Type.ERROR) {
if (result.getError().toString().equalsIgnoreCase(
"conflict(409)")) {
Toast.makeText(getApplicationContext(), "这个账号已经存在",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "注册失败",
Toast.LENGTH_SHORT).show();
}
} else if (result.getType() == IQ.Type.RESULT) {
Toast.makeText(getApplicationContext(), "恭喜你注册成功",
Toast.LENGTH_SHORT).show();
}
登录
MainActivity.connection.login(usernameEdt.getText().toString(), pwdEdt.getText().toString());
Button loginBtn = (Button) findViewById(R.id.btn_login);
loginBtn.setEnabled(false);
loginBtn.setText("登录成功");
代码太凌乱 上来格式都变了 还是整个项目看着方便