Começar a usar a verificação de número de telefone do Firebase no Android

Esta página descreve como usar o Firebase Phone Number Verification em um app Android. Consulte a visão geral para uma descrição geral desse recurso.

Nesta página, detalhamos como fazer a integração com o Firebase PNV usando a API unificada de chamada única. A chamada de um único método processa todo o fluxo de usuários do Firebase PNV, desde a obtenção do consentimento do usuário até a realização das chamadas de rede necessárias para o back-end do Firebase PNV. Ao usar esse método, você reduz as etapas de integração a uma única chamada de método.

Essa API é recomendada para a maioria dos desenvolvedores. No entanto, se você tiver requisitos específicos que não são atendidos pela biblioteca, consulte a página Personalizar o fluxo Firebase Phone Number Verification para informações sobre como implementar um fluxo personalizado.

Antes de começar

É preciso publicar a Política de Privacidade do app em um site disponível publicamente. Nessa página, explique aos usuários como você usa os números de telefone recuperados com Firebase Phone Number Verification. A biblioteca Firebase PNV vai criar um link para essa página ao pedir consentimento dos usuários para compartilhar o número de telefone com seu app.

1. Configurar seu projeto do Firebase

  1. Adicione o Firebase ao seu Projeto do Android, caso ainda não tenha feito isso.

  2. O Firebase PNV requer o plano Blaze. Se você ainda não fez o upgrade do seu projeto para o plano de preços Blaze de pagamento por uso, faça isso.

    Embora o Firebase PNV exija uma conta de faturamento vinculada ao seu projeto do Firebase, durante a fase de prévia, não haverá cobranças pelo serviço.

  3. Caso você ainda não tenha especificado a impressão digital SHA-256 do app no console do Firebase, faça isso em Configurações do projeto. Consulte Como autenticar seu cliente para mais detalhes sobre como conseguir a impressão digital SHA-256 do seu app.

  4. Abra o projeto do Firebase no console do Google Cloud e ative a API Firebase Phone Number Verification.

  5. Na página Credenciais do console, abra sua chave de API do Android e adicione a API Firebase Phone Number Verification à lista de APIs selecionadas.

2. Adicionar a biblioteca Firebase PNV ao app

No arquivo Gradle do módulo (nível do app) (geralmente <project>/<app-module>/build.gradle.kts ou <project>/<app-module>/build.gradle), adicione a dependência da biblioteca 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: verificar o suporte do Firebase PNV

Antes de iniciar o fluxo de verificação, confira se o dispositivo e o chip SIM oferecem suporte à verificação de número de telefone baseada em API. Essa é uma pré-verificação que não exige consentimento do usuário. Use o resultado desse teste para decidir se inicia o fluxo Firebase PNV ou usa um método alternativo de verificação de número de telefone, como SMS.

Para verificar a compatibilidade do dispositivo, chame o 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.
  }

O getVerificationSupportInfo() retorna uma lista de objetos VerificationSupportResult, um para cada slot de SIM. Se pelo menos um chip for compatível, siga o fluxo de Firebase PNV.

4. Iniciar o fluxo de verificação

Para iniciar o fluxo Firebase PNV, crie uma nova instância de FirebasePhoneNumberVerification, transmitindo um contexto Activity. Um contexto Activity é necessário para que o SDK apresente uma tela de consentimento ao usuário. Em seguida, chame o método getVerifiedPhoneNumber() do 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.
  }

O método getVerifiedPhoneNumber() realiza todo o fluxo de verificação do número de telefone, incluindo:

  • Usar o Gerenciador de credenciais do Android para receber o consentimento do usuário para compartilhar o número de telefone.
  • Fazendo a solicitação para o back-end Firebase PNV.
  • Retornando um número de telefone verificado para o dispositivo.

5. Como usar o token Firebase PNV

Se o fluxo for bem-sucedido, o método getVerifiedPhoneNumber() vai retornar o número de telefone verificado e um token assinado que o contém. Você pode usar esses dados no seu app, conforme documentado na sua política de privacidade.

Se você usar o número de telefone verificado fora do cliente do app, transmita o token em vez do número de telefone para verificar a integridade dele quando o usar. Para verificar o token, use qualquer biblioteca de verificação de JWT. Use a biblioteca para verificar tudo o que segue:

  • O token é assinado usando uma das chaves publicadas no endpoint Firebase PNV JWKS:

    https://fpnv.googleapis.com/v1beta/jwks
    
  • As declarações de público-alvo e emissor contêm o número do seu projeto do Firebase e estão no seguinte formato:

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

    Você pode encontrar o número do projeto do Firebase na página Configurações do projeto do console do Firebase.

  • O token não expirou.

Exemplo

Como um breve exemplo, o app Express.js a seguir recebe um token Firebase PNV de uma solicitação HTTP POST e usa uma biblioteca de verificação de JWT para verificar a assinatura e as declarações do 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);

Fazer login em um app do Firebase

Para um exemplo de como usar o token Firebase PNV em um fluxo de login do Firebase Authentication, consulte a página Autenticar com o Firebase usando Firebase Phone Number Verification.