Na tej stronie opisujemy, jak korzystać z Firebase Phone Number Verification w aplikacji na Androida. Ogólny opis tej funkcji znajdziesz w omówieniu.
Na tej stronie opisujemy, jak zintegrować się z Firebase PNV za pomocą ujednoliconego interfejsu API z jednym wywołaniem. Wywołanie pojedynczej metody obsługuje cały proces Firebase PNV, od uzyskania zgody użytkownika po wykonanie niezbędnych wywołań sieciowych do backendu Firebase PNV. Dzięki tej metodzie możesz ograniczyć liczbę kroków integracji do jednego wywołania metody.
Ten interfejs API jest zalecany dla większości deweloperów. Jeśli jednak masz konkretne wymagania, które nie są spełniane przez bibliotekę, zapoznaj się ze stroną Dostosowywanie procesu Firebase Phone Number Verification, aby dowiedzieć się, jak wdrożyć niestandardowy proces.
Zanim zaczniesz
Politykę prywatności aplikacji musisz opublikować w ogólnodostępnej witrynie. Na tej stronie musisz wyjaśnić użytkownikom, w jaki sposób używasz numerów telefonów pobranych za pomocą funkcji Firebase Phone Number Verification. Biblioteka Firebase PNV będzie zawierać link do tej strony, gdy będzie prosić użytkowników o zgodę na udostępnianie numeru telefonu Twojej aplikacji.
1. Konfigurowanie projektu Firebase
Dodaj Firebase do projektu na Androida, jeśli nie korzystasz w nim jeszcze z tej usługi.
Firebase PNV wymaga abonamentu Blaze. Jeśli nie masz jeszcze projektu z abonamentem Blaze z płatnością za wykorzystanie, zrób to.
Usługa Firebase PNV wymaga, aby do projektu Firebase było dołączone konto rozliczeniowe, ale w fazie podglądu nie będziemy obciążać Cię opłatami za tę usługę.
Jeśli nie masz jeszcze określonego odcisku cyfrowego SHA-256 aplikacji w Firebasekonsoli, zrób to w ustawieniach projektu. Szczegółowe informacje o tym, jak uzyskać odcisk cyfrowy SHA-256 aplikacji, znajdziesz w artykule Uwierzytelnianie klienta.
Otwórz projekt Firebase w konsoli Google Cloud i włącz Firebase Phone Number Verification API.
Na stronie Dane logowania w konsoli otwórz klucz interfejsu API Androida i dodaj interfejs API Firebase Phone Number Verification do listy wybranych interfejsów API.
2. Dodawanie biblioteki Firebase PNV do aplikacji
W pliku Gradle na poziomie modułu (aplikacji) (zwykle
<project>/<app-module>/build.gradle.kts
lub
<project>/<app-module>/build.gradle
) dodaj zależność z biblioteką
Firebase Phone Number Verification na Androida.
dependencies {
// Add the dependency for the Firebase Phone Number Verification library
implementation("com.google.firebase:firebase-pnv:16.0.0-beta01")
}
3. Opcjonalnie: sprawdź, czy Firebase PNV jest obsługiwany
Przed rozpoczęciem procesu weryfikacji możesz sprawdzić, czy urządzenie i karta SIM obsługują weryfikację numeru telefonu za pomocą interfejsu API. Jest to wstępne sprawdzenie, które nie wymaga zgody użytkownika. Na podstawie wyniku tego testu możesz zdecydować, czy rozpocząć proces Firebase PNV, czy użyć alternatywnej metody weryfikacji numeru telefonu, np. SMS-a.
Aby sprawdzić zgodność urządzenia, wywołaj getVerificationSupportInfo()
tę metodę:
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()
zwraca listę obiektów VerificationSupportResult
, po jednym dla każdego gniazda SIM. Jeśli co najmniej 1 karta SIM jest obsługiwana, możesz przejść do Firebase PNV.
4. Rozpocznij proces weryfikacji
Aby zainicjować przepływ Firebase PNV, utwórz nową instancję FirebasePhoneNumberVerification
, przekazując kontekst Activity
. Aby pakiet SDK mógł wyświetlić użytkownikowi ekran zgody, konieczny jest kontekstActivity
. Następnie wywołaj metodę getVerifiedPhoneNumber()
obiektu:
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.
}
Metoda getVerifiedPhoneNumber()
przeprowadza cały proces weryfikacji numeru telefonu, w tym:
- Korzystanie z Menedżera danych logowania na Androidzie w celu uzyskania zgody użytkownika na udostępnienie numeru telefonu.
- Wysyłanie żądania do backendu Firebase PNV.
- zwraca zweryfikowany numer telefonu urządzenia.
5. Używanie tokena Firebase PNV
Jeśli proces się powiedzie, metoda getVerifiedPhoneNumber()
zwróci zweryfikowany numer telefonu i podpisany token, który go zawiera. Możesz używać tych danych w aplikacji zgodnie z dokumentacją w polityce prywatności.
Jeśli używasz zweryfikowanego numeru telefonu poza klientem aplikacji, zamiast samego numeru telefonu przekazuj token, aby móc zweryfikować jego integralność podczas używania. Aby zweryfikować token, możesz użyć dowolnej biblioteki weryfikacji JWT. Za pomocą biblioteki możesz sprawdzić:
Token jest podpisany jednym z kluczy opublikowanych w punkcie końcowym Firebase PNV JWKS:
https://fpnv.googleapis.com/v1beta/jwks
Oświadczenia dotyczące odbiorców i wydawcy zawierają numer Twojego projektu Firebase i mają format:
https://fpnv.googleapis.com/projects/FIREBASE_PROJECT_NUMBER
Numer projektu Firebase znajdziesz na stronie Ustawienia projektu w konsoli Firebase.
Token nie utracił ważności.
Przykład
Oto krótki przykład: aplikacja Express.js otrzymuje token Firebase PNV z żądania HTTP POST
i używa biblioteki weryfikacji JWT do sprawdzenia podpisu i deklaracji tokena:
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);
Logowanie się w aplikacji Firebase
Przykład użycia tokena Firebase PNV w procesie logowania Firebase Authentication znajdziesz na stronie Uwierzytelnianie w Firebase za pomocą Firebase Phone Number Verification.