xmpp 注册Registration

在客户端上开发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("登录成功");



猜你喜欢

转载自blog.csdn.net/u011249920/article/details/51062823