Wie einen neuen Benutzer auf XMPP mit (a) Smack Bibliothek registrieren
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 werdenLö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