在客户端上开发xmpp的注册功能,即带内注册。
带内注册指的是未在服务器上开通账号的用户可以通过xmpp协议注册新账号。相反的概念是带外注册(out-of-band registration),例如
你必须到某个指定的web页面进行注册。
如果服务器允许带内注册,那么我们就可以通过自己开发的客户端注册新账号。与带内注册相关的协议是XEP-0077。
这里需要使用到插件 asmack-jse.jar
由于在Android平台下开发 所以我们用到的是 aSmack,与Smack没有很大的区别
下载地址:http://code.google.com/p/asmack/downloads/list
首先最重要的是配置连接
public static String host = "192.168.1.101"; //自己服务器的IP public static int port = 5222; //开放端口号,openfire默认是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); }
注册
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("登录成功");