2015-04-24 1 views
0

У меня проблема с регистрацией нового пользователя на моем сервере OpenFire. Это ответ от сервера.Как зарегистрировать нового пользователя без входа?

<iq id='XILKN-9' to='pc-pc/b529612d' from='192.168.21.107' type='error'> 
    <query xmlns='jabber:iq:register'> 
    <password>123</password> 
    <email>[email protected]</email> 
    <username>bear</username> 
    </query> 
    <error type="modify"> 
    <bad-request xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/> 
    </error> 
</iq> 

Но когда я войти в системе с любым существующим пользователем перед регистрацией нового пользователя, я могу зарегистрировать новый пользователь успешно, и это ответ от сервера

<iq id='XILKN-15' to='[email protected]/Smack' from='pc-pc' type='result'></iq> 

Вот мой код:

String user ="bear"; 
String pass = "123"; 
String email = "[email protected]"; 
HashMap<String,String> attr = new HashMap<String, String>(); 
attr.put("username",user); 
attr.put("password",pass); 
attr.put("email", email); 
if(conn2!=null) { 

    Registration reg = new Registration(); 
    reg.setType(IQ.Type.SET); 
    reg.setTo(conn2.getServiceName()); 
    reg.setAttributes(attr); 
    PacketFilter filter = new AndFilter(new PacketIDFilter(
      reg.getPacketID()), new PacketTypeFilter(IQ.class)); 
    PacketCollector collector = conn2 .createPacketCollector(filter); 
    try { 
     conn2.sendPacket(reg); 
    } catch (SmackException.NotConnectedException e) { 
     e.printStackTrace(); 
    } 
    IQ result = (IQ) collector.nextResult(SmackConfiguration 
      .getDefaultPacketReplyTimeout()); 
    System.out.println(result); 
    collector.cancel(); 

Я использовал OpenFire 3.9.3 и aSmack 4.0.7.

ответ

4

Если я понимаю вас правильно, я решаю этот вопрос на следующих шагах.

  1. creat соединение с сервером.

  2. затем использовать с AccountManager

  3. затем создать новую учетную запись createAccount

Так с должно быть что-то вроде этого:

AccountManager am = connection.getAccountManager(); 
        Map<String, String> attributes = new HashMap<String, String>(); 
        attributes.put("username", username); 
        attributes.put("password", password); 
        attributes.put("email", email); 
        attributes.put("name", name); 
        try { 
         am.createAccount(username, password,attributes); 
         Toast.makeText(getActivity(),"User create: " + username,Toast.LENGTH_SHORT).show(); 

        } catch (XMPPException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        }