Primeros pasos con la verificación de números de teléfono de Firebase en Android

En esta página, se describe cómo usar Firebase Phone Number Verification en una app para Android. Consulta la descripción general para obtener una descripción general de esta función.

En esta página, se detalla cómo realizar la integración con Firebase PNV a través de la API unificada de una sola llamada. Llamar a un solo método controla todo el flujo de usuarios de Firebase PNV, desde obtener el consentimiento del usuario hasta realizar las llamadas de red necesarias al backend de Firebase PNV. Con este método, reduces los pasos de integración a una sola llamada al método.

Se recomienda esta API para la mayoría de los desarrolladores. Sin embargo, si tienes requisitos específicos que no cumple la biblioteca, consulta la página Personaliza el flujo de Firebase Phone Number Verification para obtener información sobre cómo implementar un flujo personalizado.

Antes de comenzar

Debes publicar la política de privacidad de tu app en un sitio web disponible de forma pública. En esta página, debes explicarles a los usuarios cómo usas los números de teléfono recuperados con Firebase Phone Number Verification. La biblioteca de Firebase PNV se vinculará a esta página cuando solicite el consentimiento de los usuarios para compartir su número de teléfono con tu app.

1. Configura el proyecto de Firebase

  1. Si aún no lo has hecho, agrega Firebase al proyecto de Android.

  2. Firebase PNV requiere el plan Blaze. Si aún no actualizaste tu proyecto al plan de precios Blaze de pago por uso, hazlo.

    Si bien Firebase PNV requiere que se adjunte una cuenta de facturación a tu proyecto de Firebase, durante la fase de vista previa, no se te facturará el servicio.

  3. Si aún no especificaste la huella digital SHA-256 de tu app en la consola de Firebase, hazlo desde la Configuración del proyecto. Consulta cómo autenticar tu cliente para obtener detalles sobre cómo obtener la huella digital SHA-256 de tu app.

  4. Abre tu proyecto de Firebase en la consola de Google Cloud y habilita la API de Firebase Phone Number Verification.

  5. En la página Credenciales de la consola, abre tu clave de API de Android y agrega la API de Firebase Phone Number Verification a la lista de APIs seleccionadas.

2. Agrega la biblioteca Firebase PNV a tu app

En el archivo Gradle del módulo (nivel de la app) (generalmente <project>/<app-module>/build.gradle.kts o <project>/<app-module>/build.gradle), agrega la dependencia de la biblioteca de Firebase Phone Number Verification para Android.

dependencies {
    // Add the dependency for the Firebase Phone Number Verification library
    implementation("com.google.firebase:firebase-pnv:16.0.0-beta01")
}

3. Opcional: Verifica la compatibilidad con Firebase PNV

Antes de iniciar el flujo de verificación, puedes comprobar si el dispositivo y su tarjeta SIM admiten la verificación del número de teléfono basada en la API. Esta es una verificación previa que no requiere el consentimiento del usuario. Puedes usar el resultado de esta prueba para decidir si iniciar el flujo de Firebase PNV o usar un método alternativo de verificación del número de teléfono, como un SMS.

Para verificar la compatibilidad del dispositivo, llama al método getVerificationSupportInfo():

Kotlin

import com.google.firebase.pnv.FirebasePhoneNumberVerification
// Get an instance of the SDK.
val fpnv = FirebasePhoneNumberVerification.getInstance()

// Check all SIMs for support.
fpnv.getVerificationSupportInfo()
  .addOnSuccessListener { results ->
    if (results.any { it.isSupported() }) {
      // At least one SIM is supported; proceed with FPNV flow
    } else {
      // No SIMs are supported, so fall back to SMS verification.
    }
  }
  .addOnFailureListener { e ->
    // Handle error.
  }

getVerificationSupportInfo() devuelve una lista de objetos VerificationSupportResult, uno para cada ranura de SIM. Si se admite al menos una tarjeta SIM, puedes continuar con el flujo de Firebase PNV.

4. Inicia el flujo de verificación

Para iniciar el flujo de Firebase PNV, crea una instancia nueva de FirebasePhoneNumberVerification y pasa un contexto de Activity. Se necesita un contexto de Activity para que el SDK muestre una pantalla de consentimiento al usuario. Luego, llama al método getVerifiedPhoneNumber() del objeto:

Kotlin

// Get an instance of the SDK _with an Activity context_:
val fpnv = FirebasePhoneNumberVerification.getInstance(this@MainActivity)

// Call getVerifiedPhoneNumber
fpnv.getVerifiedPhoneNumber("https://example.com/privacy-policy")
  .addOnSuccessListener { result ->
    val phoneNumber = result.getPhoneNumber()
    val token = result.getToken()
    // Verification successful. Send token to your backend.
  }
  .addOnFailureListener { e ->
    // Handle failures, such as the user declining consent or a network error.
  }

El método getVerifiedPhoneNumber() lleva a cabo todo el flujo de verificación del número de teléfono, lo que incluye lo siguiente:

  • Usar Android Credential Manager para obtener el consentimiento del usuario para compartir su número de teléfono
  • Realiza la solicitud al backend de Firebase PNV.
  • Devuelve un número de teléfono verificado para el dispositivo.

5. Cómo usar el token de Firebase PNV

Si el flujo se completa correctamente, el método getVerifiedPhoneNumber() devuelve el número de teléfono verificado y un token firmado que lo contiene. Puedes usar estos datos en tu app, tal como se documenta en tu política de privacidad.

Si usas el número de teléfono verificado fuera del cliente de la app, debes pasar el token en lugar del número de teléfono en sí para poder verificar su integridad cuando lo uses. Para verificar el token, puedes usar cualquier biblioteca de verificación de JWT. Usa la biblioteca para verificar todo lo siguiente:

  • El token se firma con una de las claves publicadas en el extremo Firebase PNV de JWKS:

    https://fpnv.googleapis.com/v1beta/jwks
    
  • Los reclamos de público y emisor contienen el número de tu proyecto de Firebase y tienen el siguiente formato:

    https://fpnv.googleapis.com/projects/FIREBASE_PROJECT_NUMBER
    

    Puedes encontrar el número de tu proyecto de Firebase en la página Configuración del proyecto de Firebase console.

  • El token no venció.

Ejemplo

Como ejemplo breve, la siguiente app de Express.js recibe un token Firebase PNV de una solicitud HTTP POST y usa una biblioteca de verificación de JWT para comprobar la firma y las reclamaciones del token:

Node.js

import express from "express";
import { JwtVerifier } from "aws-jwt-verify";

// Find your Firebase project number in the Firebase console.
const FIREBASE_PROJECT_NUMBER = "123456789";

// The issuer and audience claims of the FPNV token are specific to your
// project.
const issuer = `https://fpnv.googleapis.com/projects/${FIREBASE_PROJECT_NUMBER}`;
const audience = `https://fpnv.googleapis.com/projects/${FIREBASE_PROJECT_NUMBER}`;

// The JWKS URL contains the current public signing keys for FPNV tokens.
const jwksUri = "https://fpnv.googleapis.com/v1beta/jwks";

// Configure a JWT verifier to check the following:
// - The token is signed by Google
// - The issuer and audience claims match your project
// - The token has not yet expired (default behavior)
const fpnvVerifier = JwtVerifier.create({ issuer, audience, jwksUri });

const app = express();

app.post('/verifiedPhoneNumber', async (req, res) => {
    if (!req.body) return res.sendStatus(400);
    // Get the token from the body of the request.
    const fpnvToken = req.body;
    try {
        // Attempt to verify the token using the verifier configured above.
        const verifiedPayload = await fpnvVerifier.verify(fpnvToken);

        // If verification succeeds, the subject claim of the token contains the
        // verified phone number. You can use this value however it's needed by
        // your app.
        const verifiedPhoneNumber = verifiedPayload.sub;
        // (Do something with it...)

        return res.sendStatus(200);
    } catch {
        // If verification fails, reject the token.
        return res.sendStatus(400);
    }
});

app.listen(3000);

Accede a una app de Firebase

Para ver un ejemplo del uso del token de Firebase PNV en un flujo de acceso de Firebase Authentication, consulta la página Authenticate with Firebase using Firebase Phone Number Verification.