Начните работу с проверкой номера телефона Firebase на Android

На этой странице описывается, как использовать 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

  1. Добавьте Firebase в свой Android-проект, если вы еще этого не сделали.

  2. Для Firebase PNV требуется тарифный план Blaze. Если вы ещё не перевели свой проект на тарифный план Blaze с оплатой по факту использования , сделайте это.

    Несмотря на то, что для использования Firebase PNV к вашему проекту Firebase необходимо прикрепить учетную запись для выставления счетов, на этапе предварительного просмотра с вас не будет взиматься плата за эту услугу.

  3. Если вы ещё не указали цифровой отпечаток SHA-256 вашего приложения в консоли Firebase , сделайте это в настройках проекта . Подробнее о получении цифрового отпечатка SHA-256 приложения см. в разделе «Аутентификация клиента» .

  4. Откройте проект Firebase в консоли Google Cloud и включите API Firebase Phone Number Verification .

  5. На странице «Учетные данные» консоли откройте свой ключ 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 Credential Manager для получения согласия пользователя на предоставление своего номера телефона.
  • Выполнение запроса к бэкэнду Firebase PNV .
  • Возвращение подтвержденного номера телефона для устройства.

5. Использование токена Firebase PNV

Если поток данных выполнен успешно, метод getVerifiedPhoneNumber() возвращает подтверждённый номер телефона и подписанный токен, содержащий его. Вы можете использовать эти данные в своём приложении, как указано в вашей политике конфиденциальности.

Если вы используете подтверждённый номер телефона вне клиента приложения, вам следует передавать токен вместо самого номера телефона, чтобы иметь возможность проверить его целостность при использовании. Для проверки токена можно использовать любую библиотеку проверки JWT. Используйте библиотеку для проверки всех следующих условий:

  • Токен подписывается с использованием одного из ключей, опубликованных в конечной точке Firebase PNV JWKS:

    https://fpnv.googleapis.com/v1beta/jwks
    
  • Утверждения аудитории и эмитента содержат номер вашего проекта Firebase и имеют следующий формат:

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

    Номер вашего проекта Firebase можно найти на странице настроек проекта в консоли Firebase.

  • Срок действия токена не истёк.

Пример

В качестве краткого примера следующее приложение 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 .