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. Chamar 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
Os direitos de proprietário do projeto são necessários para concluir as etapas de integração, incluindo a verificação da marca OAuth.
Você precisa ter uma Política de Privacidade acessível ao público para concluir a verificação da marca do OAuth. Use Firebase Hosting para criar um app da Web básico e hospedar sua política de privacidade de teste.
Verifique se você tem um chip de uma das operadoras compatíveis para testar.
1. Configurar seu projeto do Firebase
Adicione o Firebase ao seu Projeto do Android, caso ainda não tenha feito isso.
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.
Você precisa concluir o processo de integração inicial no console Firebase. Isso inclui a verificação da marca OAuth e uma análise de conformidade com a política. Se você estiver preparando um app de teste não destinado à produção, use o Firebase Hosting para criar um app da Web básico e hospedar sua política de privacidade de teste.
O Firebase PNV exige 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, isso será solicitado durante a integração.
Embora o Firebase PNV exija que uma conta de faturamento seja anexada ao seu projeto do Firebase, durante a fase de prévia, não haverá cobranças pelo serviço.
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-beta02")
}
3. Recomendado: verificar se há suporte para Firebase PNV
Para ajudar você a determinar quando mostrar a interface de entrada de número ou a interface explicativa, é recomendável verificar se o dispositivo e o chip dele são compatíveis com Firebase PNV ao iniciar o app. Essa é uma pré-verificação que não exige o consentimento do usuário. Você pode usar o resultado desse teste para decidir se inicia o fluxo Firebase PNV ou se 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 permissão ao usuário. Em seguida, chame o método getVerifiedPhoneNumber() do objeto:
Kotlin
import com.google.firebase.pnv.FirebasePhoneNumberVerification
// Get an instance of the SDK _with an Activity context_:
val fpnv = FirebasePhoneNumberVerification.getInstance(this@MainActivity)
// Call getVerifiedPhoneNumber
fpnv.getVerifiedPhoneNumber()
.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.
- Retornar um número de telefone verificado para o dispositivo (é quando o faturamento acontece).
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 cabeçalho
typestá definido comoJWT.O token é assinado usando uma das chaves publicadas no endpoint Firebase PNV JWKS com o algoritmo
ES256:https://fpnv.googleapis.com/v1beta/jwksAs declarações do emissor contêm o número do seu projeto do Firebase e estão no seguinte formato:
https://fpnv.googleapis.com/projects/FIREBASE_PROJECT_NUMBERVocê pode encontrar o número do projeto do Firebase na página Configurações do projeto do console do Firebase.
A declaração de público-alvo é uma lista que contém o número e o ID do projeto do Firebase e está no seguinte formato:
[ https://fpnv.googleapis.com/projects/FIREBASE_PROJECT_NUMBER, https://fpnv.googleapis.com/projects/FIREBASE_PROJECT_ID, ]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
previously.
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.