Pregunta

He creado un servidor y el cliente XMPP androide usando el gran post aquí ... he algunos usuarios definidos previamente creado en el servidor XMPP y pude entrar con esas credenciales.

Ahora, desde mi aplicación que quiero para registrarse como nuevos usuarios al servidor XMPP a través del cliente androide. Puede alguien por favor me sugieren cómo lograr esto ... Cualquier ayuda será apreciada grately ... !!!

¿Fue útil?

Solución 6

Lo resuelto mediante el desarrollo de un servicio web que lleva el nombre de usuario y contraseña como parámetros de correos. Si nos fijamos el nombre de usuario y pasword, el servicio web registra un nuevo usuario.

En lugar de la firma de la aplicación Me pareció que era bastante simple ...

Otros consejos

Smack tiene una funcionalidad de registro dentro de banda que puede ser utilizado a través de la clase AccountManager . Tenga en cuenta que no todos los servidores ha implementado esta característica / habilitado.

Tal vez llego tarde, pero si usted está utilizando la última smack-android:4.1.0, se puede tratar a continuación el código para la creación de objetos de XMPPTCPConnectionConfiguration connection y registrar un usuario:

// 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);
}

Sólo la elaboración de lo que flujo ha publicado. AccountManager clase tiene todos los ingredientes para el mantenimiento de las cuentas de usuario en XMPP

Suponga que tiene un objeto de conexión creado.

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

Es demasiado tarde, pero creo que sirve

           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);
        }

Asegúrate de que tienes el nombre de servicio correcto de lo contrario obtendrá mal error de solicitud.

Si ha utilizado justo por encima de la versión 4.1.0 o convertir su nombre de usuario para LocalPart para crear una nueva cuenta en el servidor.

 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();
    }

}

Quiero actualizar la respuesta para reflejar el cambio en Asmack biblioteca de la versión 4.0 en adelante. Connection.getAccountManager () es ahora AccountManager.getInstance (XMPPConnection)

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

Es necesario poner en práctica en el cliente en banda Registro funcionalidad

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top