Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Autenticarse con Firebase en Android usando un número de teléfono

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Puede usar Firebase Authentication para iniciar sesión en un usuario mediante el envío de un mensaje SMS al teléfono del usuario. El usuario inicia sesión con un código de un solo uso contenido en el mensaje SMS.

La forma más fácil de agregar el inicio de sesión con número de teléfono a su aplicación es usar FirebaseUI , que incluye un widget de inicio de sesión directo que implementa flujos de inicio de sesión para el inicio de sesión con número de teléfono, así como inicio de sesión federado y basado en contraseña. -en. Este documento describe cómo implementar un flujo de inicio de sesión de número de teléfono mediante el SDK de Firebase.

Antes de que empieces

  1. Si aún no lo ha hecho, agregue Firebase a su proyecto de Android .
  2. En el archivo Gradle de tu módulo (nivel de aplicación) (generalmente <project>/<app-module>/build.gradle ), agrega la dependencia para la biblioteca de Android Firebase Authentication. Recomendamos usar Firebase Android BoM para controlar el control de versiones de la biblioteca.

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.1.0')
    
        // Add the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth'
    }
    

    Al usar Firebase Android BoM , su aplicación siempre usará versiones compatibles de las bibliotecas de Firebase Android.

    (Alternativa) Agregar dependencias de la biblioteca de Firebase sin usar el BoM

    Si elige no usar Firebase BoM, debe especificar cada versión de la biblioteca de Firebase en su línea de dependencia.

    Tenga en cuenta que si usa varias bibliotecas de Firebase en su aplicación, le recomendamos enfáticamente que use la lista de materiales para administrar las versiones de la biblioteca, lo que garantiza que todas las versiones sean compatibles.

    dependencies {
        // Add the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth:21.1.0'
    }
    

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.1.0')
    
        // Add the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth-ktx'
    }
    

    Al usar Firebase Android BoM , su aplicación siempre usará versiones compatibles de las bibliotecas de Firebase Android.

    (Alternativa) Agregar dependencias de la biblioteca de Firebase sin usar el BoM

    Si elige no usar Firebase BoM, debe especificar cada versión de la biblioteca de Firebase en su línea de dependencia.

    Tenga en cuenta que si usa varias bibliotecas de Firebase en su aplicación, le recomendamos enfáticamente que use la lista de materiales para administrar las versiones de la biblioteca, lo que garantiza que todas las versiones sean compatibles.

    dependencies {
        // Add the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth-ktx:21.1.0'
    }
    
  3. Si aún no ha conectado su aplicación a su proyecto de Firebase, hágalo desde la consola de Firebase .
  4. Si aún no configuró el hash SHA-1 de su aplicación en Firebase console , hágalo. Consulte Autenticación de su cliente para obtener información sobre cómo encontrar el hash SHA-1 de su aplicación.

Preocupaciones de seguridad

La autenticación usando solo un número de teléfono, si bien es conveniente, es menos segura que los otros métodos disponibles, porque la posesión de un número de teléfono se puede transferir fácilmente entre usuarios. Además, en dispositivos con múltiples perfiles de usuario, cualquier usuario que pueda recibir mensajes SMS puede iniciar sesión en una cuenta usando el número de teléfono del dispositivo.

Si usa el inicio de sesión basado en el número de teléfono en su aplicación, debe ofrecerlo junto con métodos de inicio de sesión más seguros e informar a los usuarios sobre las ventajas y desventajas de seguridad del uso del inicio de sesión con el número de teléfono.

Habilite el inicio de sesión con número de teléfono para su proyecto de Firebase

Para que los usuarios inicien sesión por SMS, primero debe habilitar el método de inicio de sesión con número de teléfono para su proyecto de Firebase:

  1. En Firebase console , abra la sección Autenticación .
  2. En la página Método de inicio de sesión , habilite el método de inicio de sesión Número de teléfono .

La cuota de solicitud de inicio de sesión del número de teléfono de Firebase es lo suficientemente alta como para que la mayoría de las aplicaciones no se vean afectadas. Sin embargo, si necesita iniciar sesión en un volumen muy alto de usuarios con autenticación telefónica, es posible que deba actualizar su plan de precios. Consulte la página de precios .

Habilitar verificación de aplicaciones

Para usar la autenticación del número de teléfono, Firebase debe poder verificar que las solicitudes de inicio de sesión del número de teléfono provienen de su aplicación. Hay dos formas en que Firebase Authentication logra esto:

  • SafetyNet : si un usuario tiene un dispositivo con Google Play Services instalado y Firebase Authentication puede verificar que el dispositivo es legítimo con Android SafetyNet , se puede continuar con el inicio de sesión con el número de teléfono.
  • Para habilitar SafetyNet para su uso con Firebase Authentication:

    1. En Google Cloud Console, habilite la API de Android DeviceCheck para su proyecto. Se utilizará la clave de API de Firebase predeterminada y se debe permitir el acceso a la API de DeviceCheck.
    2. Si aún no ha especificado la huella digital SHA-256 de su aplicación, hágalo desde la página de configuración de Firebase console. Consulte Autenticación de su cliente para obtener detalles sobre cómo obtener la huella digital SHA-256 de su aplicación.
  • Verificación reCAPTCHA : en el caso de que SafetyNet no se pueda usar, como cuando el usuario no tiene soporte de Google Play Services o cuando prueba su aplicación en un emulador, Firebase Authentication usa una verificación reCAPTCHA para completar el flujo de inicio de sesión del teléfono. El desafío reCAPTCHA a menudo se puede completar sin que el usuario tenga que resolver nada. Tenga en cuenta que este flujo requiere que un SHA-1 esté asociado con su aplicación. Este flujo también requiere que su clave API no esté restringida o incluida en la lista de permitidos para "${PROJECT_NAME}.firebaseapp.com".

Enviar un código de verificación al teléfono del usuario

Para iniciar el inicio de sesión con el número de teléfono, presente al usuario una interfaz que le solicite que escriba su número de teléfono. Los requisitos legales varían, pero como práctica recomendada y para establecer expectativas para sus usuarios, debe informarles que si usan el inicio de sesión por teléfono, pueden recibir un mensaje SMS para verificación y se aplican tarifas estándar.

Luego, pasa su número de teléfono al método PhoneAuthProvider.verifyPhoneNumber para solicitar que Firebase verifique el número de teléfono del usuario. Por ejemplo:

Java

PhoneAuthOptions options = 
  PhoneAuthOptions.newBuilder(mAuth) 
      .setPhoneNumber(phoneNumber)       // Phone number to verify
      .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit
      .setActivity(this)                 // Activity (for callback binding)
      .setCallbacks(mCallbacks)          // OnVerificationStateChangedCallbacks
      .build();
  PhoneAuthProvider.verifyPhoneNumber(options);     

Kotlin+KTX

val options = PhoneAuthOptions.newBuilder(auth)
    .setPhoneNumber(phoneNumber)       // Phone number to verify
    .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit
    .setActivity(this)                 // Activity (for callback binding)
    .setCallbacks(callbacks)          // OnVerificationStateChangedCallbacks
    .build()
PhoneAuthProvider.verifyPhoneNumber(options)

El método de verifyPhoneNumber de número de teléfono es reentrante: si lo llama varias veces, como en el método onStart de una actividad, el método de verificación de número de verifyPhoneNumber no enviará un segundo SMS a menos que se haya agotado el tiempo de espera de la solicitud original.

Puede usar este comportamiento para reanudar el proceso de inicio de sesión del número de teléfono si su aplicación se cierra antes de que el usuario pueda iniciar sesión (por ejemplo, mientras el usuario está usando su aplicación de SMS). Después de llamar a verifyPhoneNumber , establezca un indicador que indique que la verificación está en curso. Luego, guarde la bandera en el método onSaveInstanceState de su Actividad y restaure la bandera en onRestoreInstanceState . Finalmente, en el método onStart de su actividad, verifique si la verificación ya está en progreso y, de ser así, llame de nuevo verifyPhoneNumber . Asegúrese de borrar la marca cuando la verificación se complete o falle (consulte Devoluciones de llamadas de verificación ).

Para manejar fácilmente la rotación de la pantalla y otras instancias de reinicios de actividad, pase su actividad al método verifyPhoneNumber de teléfono. Las devoluciones de llamada se desconectarán automáticamente cuando se detenga la actividad, por lo que puede escribir libremente el código de transición de la interfaz de usuario en los métodos de devolución de llamada.

El mensaje SMS enviado por Firebase también se puede localizar especificando el idioma de autenticación a través del método setLanguageCode en su instancia de Auth.

Java

auth.setLanguageCode("fr");
// To apply the default app language instead of explicitly setting it.
// auth.useAppLanguage();

Kotlin+KTX

auth.setLanguageCode("fr")
// To apply the default app language instead of explicitly setting it.
// auth.useAppLanguage()

Cuando llama a PhoneAuthProvider.verifyPhoneNumber , también debe proporcionar una instancia de OnVerificationStateChangedCallbacks , que contiene implementaciones de las funciones de devolución de llamada que manejan los resultados de la solicitud. Por ejemplo:

Java

mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

    @Override
    public void onVerificationCompleted(PhoneAuthCredential credential) {
        // This callback will be invoked in two situations:
        // 1 - Instant verification. In some cases the phone number can be instantly
        //     verified without needing to send or enter a verification code.
        // 2 - Auto-retrieval. On some devices Google Play services can automatically
        //     detect the incoming verification SMS and perform verification without
        //     user action.
        Log.d(TAG, "onVerificationCompleted:" + credential);

        signInWithPhoneAuthCredential(credential);
    }

    @Override
    public void onVerificationFailed(FirebaseException e) {
        // This callback is invoked in an invalid request for verification is made,
        // for instance if the the phone number format is not valid.
        Log.w(TAG, "onVerificationFailed", e);

        if (e instanceof FirebaseAuthInvalidCredentialsException) {
            // Invalid request
        } else if (e instanceof FirebaseTooManyRequestsException) {
            // The SMS quota for the project has been exceeded
        }

        // Show a message and update the UI
    }

    @Override
    public void onCodeSent(@NonNull String verificationId,
                           @NonNull PhoneAuthProvider.ForceResendingToken token) {
        // The SMS verification code has been sent to the provided phone number, we
        // now need to ask the user to enter the code and then construct a credential
        // by combining the code with a verification ID.
        Log.d(TAG, "onCodeSent:" + verificationId);

        // Save verification ID and resending token so we can use them later
        mVerificationId = verificationId;
        mResendToken = token;
    }
};

Kotlin+KTX

callbacks = object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

    override fun onVerificationCompleted(credential: PhoneAuthCredential) {
        // This callback will be invoked in two situations:
        // 1 - Instant verification. In some cases the phone number can be instantly
        //     verified without needing to send or enter a verification code.
        // 2 - Auto-retrieval. On some devices Google Play services can automatically
        //     detect the incoming verification SMS and perform verification without
        //     user action.
        Log.d(TAG, "onVerificationCompleted:$credential")
        signInWithPhoneAuthCredential(credential)
    }

    override fun onVerificationFailed(e: FirebaseException) {
        // This callback is invoked in an invalid request for verification is made,
        // for instance if the the phone number format is not valid.
        Log.w(TAG, "onVerificationFailed", e)

        if (e is FirebaseAuthInvalidCredentialsException) {
            // Invalid request
        } else if (e is FirebaseTooManyRequestsException) {
            // The SMS quota for the project has been exceeded
        }

        // Show a message and update the UI
    }

    override fun onCodeSent(
        verificationId: String,
        token: PhoneAuthProvider.ForceResendingToken
    ) {
        // The SMS verification code has been sent to the provided phone number, we
        // now need to ask the user to enter the code and then construct a credential
        // by combining the code with a verification ID.
        Log.d(TAG, "onCodeSent:$verificationId")

        // Save verification ID and resending token so we can use them later
        storedVerificationId = verificationId
        resendToken = token
    }
}

Devoluciones de llamada de verificación

En la mayoría de las aplicaciones, implementa las devoluciones de llamada onVerificationCompleted , onVerificationFailed y onCodeSent . También puede implementar onCodeAutoRetrievalTimeOut , según los requisitos de su aplicación.

onVerificationCompleted(PhoneAuthCredential)

Este método se llama en dos situaciones:

  • Verificación instantánea: en algunos casos, el número de teléfono se puede verificar instantáneamente sin necesidad de enviar o ingresar un código de verificación.
  • Recuperación automática: en algunos dispositivos, los servicios de Google Play pueden detectar automáticamente el SMS de verificación entrante y realizar la verificación sin la acción del usuario. (Es posible que esta capacidad no esté disponible con algunos operadores). Esto utiliza la API de SMS Retriever , que incluye un hash de 11 caracteres al final del mensaje SMS.
En cualquier caso, el número de teléfono del usuario se verificó correctamente y puede usar el objeto PhoneAuthCredential que se pasa a la devolución de llamada para iniciar sesión en el usuario .

onVerificationFailed(FirebaseException)

Este método se llama en respuesta a una solicitud de verificación no válida, como una solicitud que especifica un número de teléfono o un código de verificación no válidos.

onCodeSent (Id de verificación de cadena, PhoneAuthProvider.ForceResendingToken)

Opcional. Este método se llama después de que el código de verificación se haya enviado por SMS al número de teléfono proporcionado.

Cuando se llama a este método, la mayoría de las aplicaciones muestran una interfaz de usuario que solicita al usuario que escriba el código de verificación del mensaje SMS. (Al mismo tiempo, es posible que la verificación automática se realice en segundo plano). Luego, después de que el usuario ingrese el código de verificación, puede usar el código de verificación y el ID de verificación que se pasó al método para crear un objeto PhoneAuthCredential , que a su vez puede utilizar para iniciar sesión en el usuario. Sin embargo, algunas aplicaciones pueden esperar hasta que se llame a onCodeAutoRetrievalTimeOut antes de mostrar la interfaz de usuario del código de verificación (no recomendado).

onCodeAutoRetrievalTimeOut(Id de verificación de cadena)

Opcional. Se llama a este método después de que haya pasado la duración del tiempo de espera especificado para verificar el número de teléfono sin que verifyPhoneNumber se onVerificationCompleted primero. En dispositivos sin tarjetas SIM, este método se llama inmediatamente porque no es posible la recuperación automática de SMS.

Algunas aplicaciones bloquean la entrada del usuario hasta que finaliza el período de verificación automática y solo entonces muestran una interfaz de usuario que solicita al usuario que escriba el código de verificación del mensaje SMS (no recomendado).

Crear un objeto PhoneAuthCredential

Después de que el usuario ingrese el código de verificación que Firebase envió al teléfono del usuario, cree un objeto PhoneAuthCredential con el código de verificación y el ID de verificación que se pasó a la devolución de llamada onCodeSent o onCodeAutoRetrievalTimeOut . (Cuando se llama a onVerificationCompleted , obtiene un objeto PhoneAuthCredential directamente, por lo que puede omitir este paso).

Para crear el objeto PhoneAuthCredential , llame a PhoneAuthProvider.getCredential :

Java

PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);

Kotlin+KTX

val credential = PhoneAuthProvider.getCredential(verificationId!!, code)

Iniciar sesión el usuario

Después de obtener un objeto PhoneAuthCredential , ya sea en la devolución de llamada onVerificationCompleted o llamando a PhoneAuthProvider.getCredential , complete el flujo de inicio de sesión pasando el objeto PhoneAuthCredential a FirebaseAuth.signInWithCredential :

Java

private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInWithCredential:success");

                        FirebaseUser user = task.getResult().getUser();
                        // Update UI
                    } else {
                        // Sign in failed, display a message and update the UI
                        Log.w(TAG, "signInWithCredential:failure", task.getException());
                        if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
                            // The verification code entered was invalid
                        }
                    }
                }
            });
}

Kotlin+KTX

private fun signInWithPhoneAuthCredential(credential: PhoneAuthCredential) {
    auth.signInWithCredential(credential)
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    // Sign in success, update UI with the signed-in user's information
                    Log.d(TAG, "signInWithCredential:success")

                    val user = task.result?.user
                } else {
                    // Sign in failed, display a message and update the UI
                    Log.w(TAG, "signInWithCredential:failure", task.exception)
                    if (task.exception is FirebaseAuthInvalidCredentialsException) {
                        // The verification code entered was invalid
                    }
                    // Update UI
                }
            }
}

Prueba con números de teléfono ficticios

Puede configurar números de teléfono ficticios para el desarrollo a través de la consola de Firebase. Las pruebas con números de teléfono ficticios brindan estos beneficios:

  • Pruebe la autenticación del número de teléfono sin consumir su cuota de uso.
  • Pruebe la autenticación del número de teléfono sin enviar un mensaje SMS real.
  • Ejecute pruebas consecutivas con el mismo número de teléfono sin verse limitado. Esto minimiza el riesgo de rechazo durante el proceso de revisión de la tienda de aplicaciones si el revisor usa el mismo número de teléfono para la prueba.
  • Pruebe fácilmente en entornos de desarrollo sin ningún esfuerzo adicional, como la capacidad de desarrollar en un simulador de iOS o un emulador de Android sin Google Play Services.
  • Escriba pruebas de integración sin que lo bloqueen los controles de seguridad que normalmente se aplican a números de teléfono reales en un entorno de producción.

Los números de teléfono ficticios deben cumplir estos requisitos:

  1. Asegúrese de utilizar números de teléfono que sean realmente ficticios y que aún no existan. Firebase Authentication no le permite establecer números de teléfono existentes utilizados por usuarios reales como números de prueba. Una opción es usar números con el prefijo 555 como números de teléfono de prueba de EE. UU., por ejemplo: +1 650-555-3434
  2. Los números de teléfono deben tener el formato correcto para la longitud y otras restricciones. Seguirán pasando por la misma validación que el número de teléfono de un usuario real.
  3. Puede agregar hasta 10 números de teléfono para el desarrollo.
  4. Use números de teléfono/códigos de prueba que sean difíciles de adivinar y cámbielos con frecuencia.

Crear números de teléfono y códigos de verificación ficticios

  1. En Firebase console , abra la sección Autenticación .
  2. En la pestaña Método de inicio de sesión , habilite el proveedor de teléfono si aún no lo ha hecho.
  3. Abra el menú Números de teléfono para probar acordeón.
  4. Proporcione el número de teléfono que desea probar, por ejemplo: +1 650-555-3434 .
  5. Proporcione el código de verificación de 6 dígitos para ese número específico, por ejemplo: 654321 .
  6. Agrega el número. Si es necesario, puede eliminar el número de teléfono y su código pasando el cursor sobre la fila correspondiente y haciendo clic en el icono de la papelera.

Prueba manual

Puede comenzar directamente a usar un número de teléfono ficticio en su aplicación. Esto le permite realizar pruebas manuales durante las etapas de desarrollo sin encontrarse con problemas de cuota o limitaciones. También puede probar directamente desde un simulador de iOS o un emulador de Android sin tener instalados los servicios de Google Play.

Cuando proporciona el número de teléfono ficticio y envía el código de verificación, no se envía ningún SMS real. En su lugar, debe proporcionar el código de verificación configurado previamente para completar el inicio de sesión.

Al completar el inicio de sesión, se crea un usuario de Firebase con ese número de teléfono. El usuario tiene el mismo comportamiento y propiedades que un usuario de número de teléfono real y puede acceder a Realtime Database/Cloud Firestore y otros servicios de la misma manera. El token de identificación acuñado durante este proceso tiene la misma firma que un usuario de número de teléfono real.

Otra opción es establecer un rol de prueba a través de reclamos personalizados en estos usuarios para diferenciarlos como usuarios falsos si desea restringir aún más el acceso.

Para activar manualmente el flujo de reCAPTCHA para la prueba, utilice el método forceRecaptchaFlowForTesting() .

// Force reCAPTCHA flow
FirebaseAuth.getInstance().getFirebaseAuthSettings().forceRecaptchaFlowForTesting();

Pruebas de integración

Además de las pruebas manuales, Firebase Authentication proporciona API para ayudar a escribir pruebas de integración para las pruebas de autenticación telefónica. Estas API deshabilitan la verificación de aplicaciones al deshabilitar el requisito de reCAPTCHA en la web y las notificaciones automáticas silenciosas en iOS. Esto hace que las pruebas de automatización sean posibles en estos flujos y más fáciles de implementar. Además, ayudan a brindar la capacidad de probar flujos de verificación instantánea en Android.

En Android, llama a setAppVerificationDisabledForTesting() antes de la llamada signInWithPhoneNumber . Esto deshabilita la verificación de la aplicación automáticamente, lo que le permite pasar el número de teléfono sin resolverlo manualmente. Tenga en cuenta que aunque reCAPTCHA y/o SafetyNet estén deshabilitados, el uso de un número de teléfono real no podrá completar el inicio de sesión. Solo se pueden usar números de teléfono ficticios con esta API.

// Turn off phone auth app verification.
FirebaseAuth.getInstance().getFirebaseAuthSettings()
   .setAppVerificationDisabledForTesting();

Llamar verifyPhoneNumber con un número ficticio activa la devolución de llamada onCodeSent , en la que deberá proporcionar el código de verificación correspondiente. Esto permite realizar pruebas en emuladores de Android.

Java

String phoneNum = "+16505554567";
String testVerificationCode = "123456";

// Whenever verification is triggered with the whitelisted number,
// provided it is not set for auto-retrieval, onCodeSent will be triggered.
FirebaseAuth auth = FirebaseAuth.getInstance();
PhoneAuthOptions options = PhoneAuthOptions.newBuilder(auth)
        .setPhoneNumber(phoneNum)
        .setTimeout(60L, TimeUnit.SECONDS)
        .setActivity(this)
        .setCallbacks(new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
            @Override
            public void onCodeSent(String verificationId,
                                   PhoneAuthProvider.ForceResendingToken forceResendingToken) {
                // Save the verification id somewhere
                // ...

                // The corresponding whitelisted code above should be used to complete sign-in.
                MainActivity.this.enableUserManuallyInputCode();
            }

            @Override
            public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
                // Sign in with the credential
                // ...
            }

            @Override
            public void onVerificationFailed(FirebaseException e) {
                // ...
            }
        })
        .build();
PhoneAuthProvider.verifyPhoneNumber(options);

Kotlin+KTX

val phoneNum = "+16505554567"
val testVerificationCode = "123456"

// Whenever verification is triggered with the whitelisted number,
// provided it is not set for auto-retrieval, onCodeSent will be triggered.
val options = PhoneAuthOptions.newBuilder(Firebase.auth)
        .setPhoneNumber(phoneNum)
        .setTimeout(30L, TimeUnit.SECONDS)
        .setActivity(this)
        .setCallbacks(object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

            override fun onCodeSent(
                    verificationId: String,
                    forceResendingToken: PhoneAuthProvider.ForceResendingToken
            ) {
                // Save the verification id somewhere
                // ...

                // The corresponding whitelisted code above should be used to complete sign-in.
                this@MainActivity.enableUserManuallyInputCode()
            }

            override fun onVerificationCompleted(phoneAuthCredential: PhoneAuthCredential) {
                // Sign in with the credential
                // ...
            }

            override fun onVerificationFailed(e: FirebaseException) {
                // ...
            }
        })
        .build()
PhoneAuthProvider.verifyPhoneNumber(options)

Además, puede probar los flujos de recuperación automática en Android configurando el número ficticio y su código de verificación correspondiente para la recuperación automática llamando a setAutoRetrievedSmsCodeForPhoneNumber .

Cuando se llama verifyPhoneNumber , se activa onVerificationCompleted con PhoneAuthCredential directamente. Esto funciona solo con números de teléfono ficticios.

Asegúrese de que esté deshabilitado y que no haya números de teléfono ficticios codificados en su aplicación cuando publique su aplicación en la tienda Google Play.

Java

// The test phone number and code should be whitelisted in the console.
String phoneNumber = "+16505554567";
String smsCode = "123456";

FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
FirebaseAuthSettings firebaseAuthSettings = firebaseAuth.getFirebaseAuthSettings();

// Configure faking the auto-retrieval with the whitelisted numbers.
firebaseAuthSettings.setAutoRetrievedSmsCodeForPhoneNumber(phoneNumber, smsCode);

PhoneAuthOptions options = PhoneAuthOptions.newBuilder(firebaseAuth)
        .setPhoneNumber(phoneNumber)
        .setTimeout(60L, TimeUnit.SECONDS)
        .setActivity(this)
        .setCallbacks(new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
            @Override
            public void onVerificationCompleted(PhoneAuthCredential credential) {
                // Instant verification is applied and a credential is directly returned.
                // ...
            }

            // ...
        })
        .build();
PhoneAuthProvider.verifyPhoneNumber(options);

Kotlin+KTX

// The test phone number and code should be whitelisted in the console.
val phoneNumber = "+16505554567"
val smsCode = "123456"

val firebaseAuth = Firebase.auth
val firebaseAuthSettings = firebaseAuth.firebaseAuthSettings

// Configure faking the auto-retrieval with the whitelisted numbers.
firebaseAuthSettings.setAutoRetrievedSmsCodeForPhoneNumber(phoneNumber, smsCode)

val options = PhoneAuthOptions.newBuilder(firebaseAuth)
        .setPhoneNumber(phoneNumber)
        .setTimeout(60L, TimeUnit.SECONDS)
        .setActivity(this)
        .setCallbacks(object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
            override fun onVerificationCompleted(credential: PhoneAuthCredential) {
                // Instant verification is applied and a credential is directly returned.
                // ...
            }

            // ...
        })
        .build()
PhoneAuthProvider.verifyPhoneNumber(options)

Próximos pasos

Después de que un usuario inicia sesión por primera vez, se crea una nueva cuenta de usuario y se vincula a las credenciales (es decir, el nombre de usuario y la contraseña, el número de teléfono o la información del proveedor de autenticación) con las que el usuario inició sesión. Esta nueva cuenta se almacena como parte de su proyecto de Firebase y se puede usar para identificar a un usuario en cada aplicación de su proyecto, independientemente de cómo inicie sesión el usuario.

  • En sus aplicaciones, puede obtener la información básica del perfil del usuario del objeto FirebaseUser . Consulte Administrar usuarios .

  • En sus Reglas de seguridad de Firebase Realtime Database y Cloud Storage, puede obtener el ID de usuario único del usuario que inició sesión de la variable auth y usarlo para controlar a qué datos puede acceder un usuario.

Puede permitir que los usuarios inicien sesión en su aplicación utilizando varios proveedores de autenticación vinculando las credenciales del proveedor de autenticación a una cuenta de usuario existente.

Para cerrar la sesión de un usuario, llame a signOut :

Java

FirebaseAuth.getInstance().signOut();

Kotlin+KTX

Firebase.auth.signOut()