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

На этой странице описано, как использовать Firebase Phone Number Verification в приложении для Android. Общее описание этой функции см. в разделе « Обзор» .

На этой странице подробно описано, как интегрировать Firebase PNV с помощью унифицированного API с одним вызовом. Вызов одного метода обрабатывает весь пользовательский поток Firebase PNV , от получения согласия пользователя до выполнения необходимых сетевых запросов к бэкэнду Firebase PNV . Используя этот метод, вы сводите этапы интеграции к одному вызову метода.

Этот API рекомендуется большинству разработчиков; однако, если у вас есть особые требования, которые не удовлетворяются библиотекой, см. страницу «Настройка процесса Firebase Phone Number Verification для получения информации о реализации пользовательского процесса.

Прежде чем начать

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

1. Настройте свой проект Firebase.

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

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

  3. Вам потребуется пройти процедуру первоначальной регистрации в консоли Firebase . Она включает в себя подтверждение бренда через OAuth и ознакомление с политикой конфиденциальности.

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

    Хотя для Firebase PNV требуется привязать платежный аккаунт к вашему проекту Firebase, на этапе предварительного просмотра с вас не будет взиматься плата за услугу.

  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-карту Firebase PNV . Это предварительная проверка, не требующая согласия пользователя. Результаты этой проверки помогут решить, следует ли запускать процесс 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 .