На этой странице описано, как использовать Firebase Phone Number Verification в приложении для Android. Общее описание этой функции см. в разделе « Обзор» .
На этой странице подробно описано, как интегрировать Firebase PNV с помощью унифицированного API с одним вызовом. Вызов одного метода обрабатывает весь пользовательский поток Firebase PNV , от получения согласия пользователя до выполнения необходимых сетевых запросов к бэкэнду Firebase PNV . Используя этот метод, вы сводите этапы интеграции к одному вызову метода.
Этот API рекомендуется большинству разработчиков; однако, если у вас есть особые требования, которые не удовлетворяются библиотекой, см. страницу «Настройка процесса Firebase Phone Number Verification для получения информации о реализации пользовательского процесса.
Прежде чем начать
Вы должны опубликовать политику конфиденциальности вашего приложения на общедоступном веб-сайте. На этой странице вы должны объяснить пользователям, как вы используете номера телефонов, полученные с помощью Firebase Phone Number Verification . Библиотека Firebase PNV будет ссылаться на эту страницу при запросе согласия пользователей на передачу их номеров телефонов вашему приложению.
1. Настройте свой проект Firebase.
Добавьте Firebase в свой Android-проект, если вы еще этого не сделали.
Для работы Firebase PNV требуется тарифный план Blaze. Если вы еще не перевели свой проект на тарифный план Blaze с оплатой по мере использования , сделайте это.
Хотя для Firebase PNV требуется привязать платежный аккаунт к вашему проекту Firebase, на этапе предварительного просмотра с вас не будет взиматься плата за услугу.
Если вы еще не указали отпечаток SHA-256 вашего приложения в консоли Firebase , сделайте это в настройках проекта . Подробную информацию о том, как получить отпечаток SHA-256 вашего приложения, см. в разделе «Аутентификация клиента» .
Откройте свой проект Firebase в консоли Google Cloud и включите API Firebase Phone Number Verification .
На странице «Учетные данные» в консоли откройте свой ключ API для Android и добавьте API Firebase Phone Number Verification в список выбранных API.
2. Добавьте библиотеку Firebase PNV в ваше приложение.
В файл Gradle вашего модуля (уровня приложения) (обычно <project>/<app-module>/build.gradle.kts или <project>/<app-module>/build.gradle ) добавьте зависимость от библиотеки Firebase Phone Number Verification для Android.
dependencies {
// Add the dependency for the Firebase Phone Number Verification library
implementation("com.google.firebase:firebase-pnv:16.0.0-beta01")
}
3. Необязательно: проверьте наличие поддержки Firebase PNV
Перед запуском процесса проверки вы можете убедиться, что устройство и его SIM-карта поддерживают проверку номера телефона на основе API. Это предварительная проверка, не требующая согласия пользователя. Результаты этой проверки помогут вам решить, следует ли запускать процесс Firebase PNV или использовать альтернативный метод проверки номера телефона, например, SMS.
Для проверки совместимости устройства вызовите метод 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() возвращает список объектов VerificationSupportResult , по одному для каждого слота SIM-карты. Если поддерживается хотя бы одна SIM-карта, можно продолжить работу с потоком Firebase PNV .
4. Запустите процесс проверки.
Для запуска процесса Firebase PNV создайте новый экземпляр FirebasePhoneNumberVerification , передав в него контекст Activity . Контекст Activity необходим для того, чтобы SDK мог отобразить пользователю экран согласия. Затем вызовите метод getVerifiedPhoneNumber() этого объекта:
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.
}
Метод getVerifiedPhoneNumber() выполняет весь процесс проверки номера телефона, включая:
- Использование менеджера учетных данных Android для получения согласия пользователя на передачу его номера телефона.
- Отправка запроса к бэкэнду Firebase PNV .
- Возвращается подтвержденный номер телефона устройства (именно в этот момент происходит выставление счетов).
5. Использование токена Firebase PNV
Если процесс завершится успешно, метод getVerifiedPhoneNumber() вернет подтвержденный номер телефона и подписанный токен, содержащий его. Вы можете использовать эти данные в своем приложении в соответствии с вашей политикой конфиденциальности.
Если вы используете подтвержденный номер телефона вне клиентского приложения, следует передавать токен, а не сам номер телефона, чтобы проверить его целостность при использовании. Для проверки токена можно использовать любую библиотеку для проверки JWT. Используйте библиотеку для проверки всего следующего:
В заголовке
typустановлен форматJWT.Токен подписывается с использованием одного из ключей, опубликованных в конечной точке Firebase PNV JWKS, с применением алгоритма
ES256:https://fpnv.googleapis.com/v1beta/jwksВ заявлении эмитента содержится номер вашего проекта Firebase, и оно имеет следующий формат:
https://fpnv.googleapis.com/projects/FIREBASE_PROJECT_NUMBERНомер вашего проекта Firebase можно найти на странице настроек проекта в консоли Firebase.
Утверждение аудитории представляет собой список, содержащий номер вашего проекта Firebase и идентификатор проекта, и имеет следующий формат:
[ https://fpnv.googleapis.com/projects/FIREBASE_PROJECT_NUMBER, https://fpnv.googleapis.com/projects/FIREBASE_PROJECT_ID, ]Срок действия токена не истёк.
Пример
В качестве краткого примера, следующее приложение Express.js получает токен Firebase PNV из HTTP POST запроса и использует библиотеку проверки JWT для проверки подписи и утверждений токена:
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);
Войдите в приложение Firebase
Пример использования токена Firebase PNV в процессе входа в систему с помощью Firebase Authentication можно найти на странице «Аутентификация с помощью Firebase с использованием Firebase Phone Number Verification .