Si recuerdan en el I/O 2017 presentaron algunas de las nuevas herramientas para Firebase y una de ellas que me llamo mucho la atención (La verdad es que todas me atraen), me refiero a la autenticación del usuario mediante SMS, ya saben, así como funciona en WhatsApp y algunas otras aplicaciones.

 

Pues aprovechando un poco más el tiempo pude realizar un ejemplo completo el cual empezare a detallar ahora.

Envío del SMS:

Para empezar el ciclo de la autenticación es necesario obtener el numero del usuario, por lo cual coloque un campo de texto para registrarlo. Es importante destacar que la API valida el país de origen o bien la nacionalidad ingresada por el usuario en Google Play Services, por lo tanto no necesitaremos el código de país.

Firebase SMS AUTH

Una vez que el usuario ingresa en el botón de continuar hacemos el intento de enviar el SMS mediante la función concerniente a dicho click. En este caso es algo como:

PhoneAuthProvider.getInstance().verifyPhoneNumber();

Este método recibe los datos del número de teléfono y algunos más para la validación. Al ejecutarse suceden 3 posibles escenarios comunes.

  1. El mensaje se envía satisfactoriamente
  2. El mensaje no pudo ser enviado
  3. El mensaje no se envía pero se verifica el número mediante el sistema operativo y Google Play Services.

 

Verificación:

Al recibir el código por sms el usuario deberá ingresarlo y para verificarlo no debemos ni siquiera hacer una comparación, ya que no conocemos en realidad el valor del código enviado. Esto funciona mediante la verificación con un token que si conocemos.

PhoneAuthCredential credential = PhoneAuthProvider.getCredential(token, codeigo);

 

Al recibirlo simplemente verificamos como solemos hacerlo con Firebase mediante su credencial y de funcionar todo bien nos devolverá el usuario e iniciara la sesión de la siguiente manera:

FirebaseAuth.getInstance().signInWithCredential(credential)
        .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()){
                    result.setText(getString(R.string.success) + " | Usuario: " + task.getResult().getUser().getUid() );
                }else{
                    result.setText(getString(R.string.fail) + " | Exception: " + task.getException().getLocalizedMessage());
                }
                result.setVisibility(View.VISIBLE);
            }
        });

 

Como se puede ver solamente enviamos a Firebase una petición para validar el credencial y nosotros recibimos el ok o el fail.

Para más detalles puedes revisar el repositorio de este ejemplo: https://goo.gl/YAxhQt

Explicación simple:

Hay aplicaciones que buscan un mayor número de usuarios permitiendo la autenticación con números de teléfono y no solo con cuentas electrónicas. Esto ha traído una nueva necesidad que Firebase busca cumplir y simplificar.

Ademas de los casos donde tu número es tu cuenta, con esto también podemos implementar la autenticación en dos pasos donde usas tu correo y tu número de teléfono. Si todo funciona bien, pues tendremos la sesión debidamente iniciada.

En está ocasión el ejemplo está hecho en Android, sin embargo esto llego con todo y lo puedes usar en IOS y web de igual manera.