Frage

Ich habe einen XMPP-Server und Android-Client die großen Beitrag mit hier ... ich habe in der xmpp Server einige vordefinierte Benutzer einrichten und ich konnte mit diesen Anmeldeinformationen.

Nun, aus meinem app ich will als neuen Benutzer zu dem xmpp Server über das Android-Client registrieren. Kann mir jemand bitte vorschlagen, wie dies zu erreichen ... Jede Hilfe wird grately ... !!!

geschätzt werden
War es hilfreich?

Lösung 6

Ich löste es durch eine Webservice zu entwickeln, die den Benutzernamen und das Passwort als post-Parameter nimmt. Wenn wir die Benutzername und pasword posten, die WebService registriert einen neuen Benutzer an.

Statt Unterzeichnung aus der App bis ich das gefunden, einfach sein eher ...

Andere Tipps

Smack hat InBand Registrierung Funktionalität, die über die Account Klasse. Beachten Sie, dass nicht jeder Server hat diese Funktion implementiert / aktiviert.

Vielleicht bin ich zu spät, aber wenn Sie neuesten smack-android:4.1.0 verwenden, können Sie unter Code versuchen, für XMPPTCPConnectionConfiguration des connection Objekt erstellen und einen Benutzer registrieren:

// Creating a connection
XMPPTCPConnectionConfiguration connConfig =
        XMPPTCPConnectionConfiguration.builder()
                .setHost("myHost.com")  // Name of your Host
                .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
                .setPort(5222)          // Your Port for accepting c2s connection
                .setDebuggerEnabled(true)
                .setServiceName("myServiceName")
                .build();
AbstractXMPPConnection connection = new XMPPTCPConnection(connConfig);

try {
    // connecting...
    connection.connect();
    Log.i("TAG", "Connected to " + connection.getHost());

    // Registering the user
    AccountManager accountManager = AccountManager.getInstance(connection);
    accountManager.sensitiveOperationOverInsecureConnection(true);
    accountManager.createAccount(username, password);   // Skipping optional fields like email, first name, last name, etc..
} catch (SmackException | IOException | XMPPException e) {
    Log.e("TAG", e.getMessage());
    xmppClient.setConnection(null);
}

Just Ausarbeitung auf was Fluss wurde gebucht. AccountManager Klasse hat alle Zutaten für Benutzerkonten in XMPP Aufrechterhaltung

Angenommen, Sie haben ein Verbindungsobjekt erstellt.

AccountManager accountManager=new AccountManager(connection);
try {
    accountManager.createAccount("username", "password");
} catch (XMPPException e1) {
    Log.d(e1.getMessage(), e1);
}

Es ist zu spät, aber hofft, es hilft

           XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration
                    .builder();
            config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
            config.setServiceName("nouman.test");
            config.setHost(serverAddress);
            config.setPort(5222);
            config.setDebuggerEnabled(true);
            XMPPTCPConnection.setUseStreamManagementResumptiodDefault(true);
            XMPPTCPConnection.setUseStreamManagementDefault(true);
            config.setSendPresence(true);
            config.setDebuggerEnabled(true);
            config.setSendPresence(true);
            config.setCompressionEnabled(false);
            connection = new XMPPTCPConnection(config.build());
            connection.connect();


 AccountManager accountManager = AccountManager.getInstance(connection);
        Map<String, String> attributes = new HashMap<>();
        attributes.put("name", "full_name");
        attributes.put("email", "email");
        try {
            if (accountManager.supportsAccountCreation()) {
                accountManager.sensitiveOperationOverInsecureConnection(true);
                accountManager.createAccount("username","password", attributes);
                isAccountCreated = true;
            }
        } catch (Exception e) {
            //TODO : Case 409 or Message conflict is the case of username exist handle the case
            LogUtil.printStackTrace(e);
        }

Stellen Sie sicher, haben Sie den richtigen Dienstnamen sonst werden Sie schlecht Anfrage Fehler.

Wenn Sie Smack 4.1.0 oder höher Version konvertieren Ihren Benutzernamen Localpart verwendet für neues Konto auf dem Server erstellen.

 public static void registration(String username,ICallBack iCallBack){

    AccountManager accountManager = AccountManager.getInstance(connection);
    try {
        if(accountManager.supportsAccountCreation()){
            accountManager.sensitiveOperationOverInsecureConnection(true);
            accountManager.createAccount(Localpart.from(username), username);
            iCallBack.onSuccess();
        }
    } catch (SmackException.NoResponseException | XMPPException.XMPPErrorException | SmackException.NotConnectedException e) {
        iCallBack.onFailure(e);
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (XmppStringprepException e) {
        e.printStackTrace();
    }

}

Ich will die Antwort aktualisieren, um die Änderung in Asmack Bibliothek Version 4.0 weiter zu reflektieren. Connection.getAccountManager () ist jetzt AccountManager.getInstance (XMPPConnection)

AccountManager accountManager=AccountManager.getInstance(connection);
try {
    accountManager.createAccount("username", "password");
} catch (XMPPException e1) {
    Log.d(e1.getMessage(), e1);
}

Sie müssen in Client InBand Registrierung Funktionalität

implementieren
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top