Mulai menggunakan Verifikasi Nomor Telepon Firebase di Android

Halaman ini menjelaskan cara menggunakan Firebase Phone Number Verification di aplikasi Android. Lihat ringkasan untuk mengetahui deskripsi umum tentang fitur ini.

Halaman ini menjelaskan cara berintegrasi dengan Firebase PNV menggunakan API panggilan tunggal terpadu. Memanggil satu metode menangani seluruh alur pengguna Firebase PNV, mulai dari mendapatkan izin pengguna hingga melakukan panggilan jaringan yang diperlukan ke backend Firebase PNV. Dengan menggunakan metode ini, Anda mengurangi langkah integrasi menjadi satu panggilan metode.

API ini direkomendasikan untuk sebagian besar developer; namun, jika Anda memiliki persyaratan khusus yang tidak dipenuhi oleh library, lihat halaman Menyesuaikan alur Firebase Phone Number Verification untuk mengetahui informasi tentang penerapan alur kustom.

Sebelum memulai

Anda harus memublikasikan kebijakan privasi aplikasi di situs yang tersedia secara publik. Di halaman ini, Anda harus menjelaskan kepada pengguna cara Anda menggunakan nomor telepon yang diambil menggunakan Firebase Phone Number Verification. Library Firebase PNV akan ditautkan ke halaman ini saat meminta izin dari pengguna untuk membagikan nomor telepon mereka ke aplikasi Anda.

1. Menyiapkan project Firebase Anda

  1. Tambahkan Firebase ke project Android jika Anda belum melakukannya.

  2. Firebase PNV memerlukan paket Blaze. Jika Anda belum mengupgrade project ke paket harga Blaze bayar sesuai penggunaan, lakukan sekarang.

  3. Jika Anda belum menentukan sidik jari SHA-256 aplikasi di Firebase console, lakukanlah dari Project settings. Baca artikel Mengautentikasi Klien untuk mengetahui detail tentang cara mendapatkan sidik jari SHA-256 aplikasi.

  4. Buka project Firebase Anda di konsol Google Cloud dan aktifkan Firebase Phone Number Verification API.

  5. Di halaman Credentials di konsol, buka kunci API Android Anda dan tambahkan Firebase Phone Number Verification API ke daftar API yang dipilih.

2. Tambahkan library Firebase PNV ke aplikasi Anda

Di file Gradle modul (level aplikasi) (biasanya <project>/<app-module>/build.gradle.kts atau <project>/<app-module>/build.gradle), tambahkan dependensi untuk library Firebase Phone Number Verification untuk Android.

dependencies {
    // Add the dependency for the Firebase Phone Number Verification library
    implementation("com.google.firebase:firebase-pnv:16.0.0-beta01")
}

3. Opsional: Memeriksa dukungan Firebase PNV

Sebelum memulai alur verifikasi, Anda dapat memeriksa apakah perangkat dan kartu SIM-nya mendukung verifikasi nomor telepon berbasis API. Ini adalah pra-pemeriksaan yang tidak memerlukan izin pengguna. Anda dapat menggunakan hasil pengujian ini untuk memutuskan apakah akan memulai alur Firebase PNV atau menggunakan metode alternatif verifikasi nomor telepon, seperti SMS.

Untuk memeriksa kompatibilitas perangkat, panggil metode 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() menampilkan daftar objek VerificationSupportResult, satu untuk setiap slot SIM. Jika setidaknya satu kartu SIM didukung, Anda dapat melanjutkan alur Firebase PNV.

4. Memulai alur verifikasi

Untuk memulai alur Firebase PNV, buat instance FirebasePhoneNumberVerification baru, dengan meneruskan konteks Activity. Konteks Activity diperlukan agar SDK menampilkan layar izin kepada pengguna. Kemudian, panggil metode getVerifiedPhoneNumber() objek:

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.
  }

Metode getVerifiedPhoneNumber() menjalankan seluruh alur verifikasi nomor telepon, termasuk:

  • Menggunakan Android Credential Manager untuk mendapatkan izin pengguna agar nomor telepon mereka dibagikan.
  • Membuat permintaan ke backend Firebase PNV.
  • Menampilkan nomor telepon terverifikasi untuk perangkat.

5. Menggunakan token Firebase PNV

Jika alur berhasil, metode getVerifiedPhoneNumber() akan menampilkan nomor telepon terverifikasi dan token bertanda tangan yang berisi nomor tersebut. Anda dapat menggunakan data ini di aplikasi Anda seperti yang didokumentasikan oleh kebijakan privasi Anda.

Jika Anda menggunakan nomor telepon terverifikasi di luar klien aplikasi, Anda harus meneruskan token, bukan nomor telepon itu sendiri, sehingga Anda dapat memverifikasi integritasnya saat Anda menggunakannya. Untuk memverifikasi token, Anda dapat menggunakan library verifikasi JWT apa pun. Gunakan library untuk memverifikasi semua hal berikut:

  • Token ditandatangani menggunakan salah satu kunci yang dipublikasikan di endpoint JWKS Firebase PNV:

    https://fpnv.googleapis.com/v1beta/jwks
    
  • Klaim audiens dan penerbit berisi nomor project Firebase Anda dan dalam format berikut:

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

    Anda dapat menemukan nomor project Firebase di halaman Project settings di Firebase console.

  • Masa berlaku token belum berakhir.

Contoh

Sebagai contoh singkat, aplikasi Express.js berikut menerima token Firebase PNV dari permintaan POST HTTP dan menggunakan library verifikasi JWT untuk memeriksa tanda tangan dan klaim 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);

Login ke aplikasi Firebase

Untuk melihat contoh penggunaan token Firebase PNV dalam alur login Firebase Authentication, lihat halaman Mengautentikasi dengan Firebase menggunakan Firebase Phone Number Verification.