Questa pagina descrive come utilizzare Firebase Phone Number Verification in un'app per Android. Per una descrizione generale di questa funzionalità, consulta la panoramica.
Questa pagina descrive in dettaglio come eseguire l'integrazione con Firebase PNV utilizzando l'API unificata a chiamata singola. La chiamata di un singolo metodo gestisce l'intero flusso utente Firebase PNV, dall'ottenimento del consenso dell'utente all'esecuzione delle chiamate di rete necessarie al backend Firebase PNV. Utilizzando questo metodo, riduci i passaggi di integrazione a una singola chiamata al metodo.
Questa API è consigliata per la maggior parte degli sviluppatori. Tuttavia, se hai requisiti specifici non soddisfatti dalla libreria, consulta la pagina Personalizzare il flusso Firebase Phone Number Verification per informazioni sull'implementazione di un flusso personalizzato.
Prima di iniziare
Devi pubblicare le norme sulla privacy della tua app su un sito web disponibile pubblicamente. In questa pagina devi spiegare agli utenti come utilizzi i numeri di telefono recuperati utilizzando Firebase Phone Number Verification. La libreria Firebase PNV rimanderà a questa pagina quando richiederà il consenso degli utenti a condividere il proprio numero di telefono con la tua app.
1. Configura il progetto Firebase
Aggiungi Firebase al tuo progetto Android se non l'hai già fatto.
Firebase PNV richiede il piano Blaze. Se non hai ancora eseguito l'upgrade del tuo progetto al piano tariffario Blaze con pagamento a consumo, fallo ora.
Se non hai ancora specificato l'impronta SHA-256 della tua app nella console Firebase, fallo dalle Impostazioni progetto. Consulta la sezione Autenticazione del client per informazioni dettagliate su come ottenere l'impronta SHA-256 della tua app.
Apri il progetto Firebase nella console Google Cloud e abilita l'Firebase Phone Number Verification API.
Nella pagina Credenziali della console, apri la chiave API Android e aggiungi l'API Firebase Phone Number Verification all'elenco delle API selezionate.
2. Aggiungere la libreria Firebase PNV all'app
Nel file Gradle (a livello di app) del modulo (solitamente
<project>/<app-module>/build.gradle.kts
o
<project>/<app-module>/build.gradle
), aggiungi la dipendenza per la libreria
Firebase Phone Number Verification per Android.
dependencies {
// Add the dependency for the Firebase Phone Number Verification library
implementation("com.google.firebase:firebase-pnv:16.0.0-beta01")
}
3. (Facoltativo) Controlla il supporto di Firebase PNV
Prima di avviare il flusso di verifica, puoi controllare se il dispositivo e la relativa scheda SIM supportano la verifica del numero di telefono basata su API. Si tratta di un controllo preliminare che non richiede il consenso dell'utente. Puoi utilizzare il risultato di questo test per decidere se avviare il flusso Firebase PNV o utilizzare un metodo alternativo di verifica del numero di telefono, ad esempio tramite SMS.
Per verificare la compatibilità del dispositivo, chiama il metodo 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()
restituisce un elenco di oggetti VerificationSupportResult
, uno per ogni slot SIM. Se almeno una scheda SIM è supportata, puoi
procedere con il flusso di Firebase PNV.
4. Avviare il flusso di verifica
Per avviare il flusso Firebase PNV, crea una nuova istanza di
FirebasePhoneNumberVerification
, passando un contesto Activity
. Un
contesto Activity
è necessario affinché l'SDK mostri una schermata di consenso all'utente. Quindi, chiama il metodo getVerifiedPhoneNumber()
dell'oggetto:
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.
}
Il metodo getVerifiedPhoneNumber()
esegue l'intero flusso di verifica del numero di telefono, tra cui:
- Utilizzo di Android Credential Manager per ottenere il consenso dell'utente a condividere il proprio numero di telefono.
- Invio della richiesta al backend Firebase PNV.
- Restituzione di un numero di telefono verificato per il dispositivo.
5. Utilizzo del token Firebase PNV
Se il flusso ha esito positivo, il metodo getVerifiedPhoneNumber()
restituisce il numero di telefono verificato e un token firmato che lo contiene. Puoi utilizzare questi dati nella tua app
come documentato dalle tue norme sulla privacy.
Se utilizzi il numero di telefono verificato al di fuori del client dell'app, devi passare il token anziché il numero di telefono stesso, in modo da poterne verificare l'integrità quando lo utilizzi. Per verificare il token, puoi utilizzare qualsiasi libreria di verifica JWT. Utilizza la libreria per verificare quanto segue:
Il token è firmato utilizzando una delle chiavi pubblicate nell'endpoint JWKS Firebase PNV:
https://fpnv.googleapis.com/v1beta/jwks
Le rivendicazioni audience e emittente contengono il numero del tuo progetto Firebase e hanno il seguente formato:
https://fpnv.googleapis.com/projects/FIREBASE_PROJECT_NUMBER
Puoi trovare il numero del progetto Firebase nella pagina Impostazioni progetto della console Firebase.
Il token non è scaduto.
Esempio
Come breve esempio, la seguente app Express.js riceve un token Firebase PNV da
una richiesta HTTP POST
e utilizza una libreria di verifica JWT per controllare la firma
e le rivendicazioni 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);
Accedere a un'app Firebase
Per un esempio di utilizzo del token Firebase PNV in un flusso di accesso Firebase Authentication, consulta la pagina Eseguire l'autenticazione con Firebase utilizzando Firebase Phone Number Verification.