2016-08-02 31 views
2

Ich mache Chat-Anwendung mit Smack. Ich bin neu für diese Technologie.Erstellen neuer Benutzer mit Smack 4.2.0-Beta1 auf Ejabberd wirft XMPP Ausnahme: verboten - auth

Ich habe einige manuelle Benutzer von Ejabberd Server erstellt. Mit diesen Benutzern habe ich einen Chat und Gruppenchat gemacht.

Aber ich versucht, neue Benutzer von Android-Code erstellen Aber ich bin immer dies unter Fehler

XMPPError: forbidden - auth 
    08-02 08:23:36.273 31097-31097/com.agarangroup.hello W/System.err:  at org.jivesoftware.smack.PacketCollector.nextResultOrThrow(PacketCollector.java:232) 
    08-02 08:23:36.273 31097-31097/com.agarangroup.hello W/System.err:  at org.jivesoftware.smack.PacketCollector.nextResultOrThrow(PacketCollector.java:207) 

Dies ist die Konfiguration I in ejabberd Server

announce [{allow,[{acl,admin}]}] 
c2s [{deny,[{acl,blocked}]},{allow,[{acl,all}]}] 
c2s_shaper [{none,[{acl,admin}]},{normal,[all]}] 
configure [{allow,[{acl,admin}]}] 
local [{allow,[{acl,all}]}] 
max_user_offline_messages [{5000,[{acl,admin}]},{100,[all]}] 
max_user_sessions [{10,[all]}] 
muc_create [{allow,[{acl,all}]}] 
pubsub_createnode [{allow,[{acl,local}]}] 
register [{allow,[{acl,all}]}] 
s2s_shaper [{fast,[all]}] 
trusted_network [{allow,[{acl,loopback}]}] 

aktualisiert haben:

Hier initialisiere ich meine Verbindung

private void initialiseConnection() { 
     DomainBareJid serviceName = null; 
     try { 
      serviceName = JidCreate.domainBareFrom(ServiceAddress); 
     } catch (XmppStringprepException e) { 
      e.printStackTrace(); 
     } 
     XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration 
       .builder().setKeystoreType(null); 
     // XMPPTCPConnectionConfiguration.builder().setKeystoreType(null); 

     config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled); 
     config.setServiceName(serviceName); 
     config.setHost(serverAddress); 
     config.setPort(5222); 
     config.setDebuggerEnabled(true); 
     XMPPTCPConnection.setUseStreamManagementDefault(true); 
     connection = new XMPPTCPConnection(config.build()); 
     XMPPConnectionListener connectionListener = new XMPPConnectionListener(); 
     connection.addConnectionListener(connectionListener); 
    } 

Ich bin Verbindung diese Verbindung nach

connection.connect(); 
        DeliveryReceiptManager dm = DeliveryReceiptManager 
          .getInstanceFor(connection); 
        dm.setAutoReceiptMode(AutoReceiptMode.always); 
        dm.addReceiptReceivedListener(new ReceiptReceivedListener() { 
         @Override 
         public void onReceiptReceived(Jid fromJid, Jid toJid, String receiptId, Stanza receipt) { 

         } 
        }); 
        connected = true; 

Methode initialisieren neuen Benutzer erstellen

public void createNewUser(){ 
     try { 
      /* UserRegisterUtil.registerAccount(connection,"Mathan","[email protected]"); 
      connection.disconnect(); 
      connection.connect();*/ 
      Localpart lp = Localpart.from("IamHere"); 
      // Registering the user 
      AccountManager accountManager = AccountManager.getInstance(connection); 
      accountManager.sensitiveOperationOverInsecureConnection(true); 
      accountManager.createAccount(lp, "mathan123"); // Skipping optional fields like email, first name, last name, etc.. 
      Toast.makeText(context, "=>User creation completed....", 
        Toast.LENGTH_LONG).show(); 
      Log.d("xmpp", ">User creation completed....!"); 
     } catch (SmackException.NoResponseException e) { 
      e.printStackTrace(); 
     } catch (XMPPException.XMPPErrorException e) { 
      e.printStackTrace(); 
     } catch (NotConnectedException e) { 
      e.printStackTrace(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } catch (XMPPException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (SmackException e) { 
      e.printStackTrace(); 
     } 
    } 

Es ist ein Fehler, den ich bekam es von ACL verweigert sagt. Aber ich weiß nicht, wie man es in Windows Ejabberd Server ändert.

<error code='403' type='auth'><forbidden xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/><text xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'>Denied by ACL</text></error> 

Kann mir jemand sagen, wie man einen neuen Benutzer erstellen, was ich ändern in dieser Konfigurationsdatei wollen?

Auch habe ich einige Zweifel

Wie Offline-Nachrichten in Android mit Smack Bibliothek bekommen?

Wie bekomme ich Chat-Geschichte?

Antwort

0

Über die Benutzererstellung: müssen Sie zuerst die Verbindung zu Ihrer Verbindung herstellen (nicht anmelden).

Mehr müssen alle Benutzernamen klein geschrieben werden:

accountManager.createAccount(lp.toLowerCase(), "mathan123"); 


Über Offline-Nachrichten: sie ausgelöst werden, wenn Nutzer online

Über Chat-Geschichte gehen: sorry, ich habe nicht expirience mit Ejabber, aber für normalen Chat 1vs1 müssen Sie wahrscheinlich auf dem Client speichern oder einige benutzerdefinierte Funktion auf dem Server hinzufügen (wie Openfire).

+0

Ich habe bereits mit dem Server verbunden. Auch ich habe den Benutzernamen in Kleinbuchstaben geändert, aber es sagt immer noch dasselbe. :( – MathaN

+0

Ich aktualisierte meine Frage können Sie auf sie aussehen :) @MrPk – MathaN

+0

das klingt eher wie Ejabber + ACL (LDAP?) Problem, könnte aber interessant sein, den Teil zu lesen, wenn Sie eine Verbindung zum Server – MrPk