เริ่มต้นใช้งานการยืนยันหมายเลขโทรศัพท์ด้วย 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 แบบจ่ายตามการใช้งาน โปรดดำเนินการ

  3. หากยังไม่ได้ระบุลายนิ้วมือ SHA-256 ของแอปในคอนโซล Firebase ให้ระบุจากการตั้งค่าโปรเจ็กต์ ดูรายละเอียดวิธีรับลายนิ้วมือ SHA-256 ของแอปได้ที่ การตรวจสอบสิทธิ์ไคลเอ็นต์

  4. เปิดโปรเจ็กต์ Firebase ในคอนโซล Google Cloud แล้วเปิดใช้ Firebase Phone Number Verification API

  5. ในหน้าข้อมูลเข้าสู่ระบบ ของคอนโซล ให้เปิดคีย์ API ของ Android แล้วเพิ่ม Firebase Phone Number Verification API ลงในรายการ API ที่เลือก

2. เพิ่มไลบรารี Firebase PNV ลงในแอป

ในไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยมากจะเป็น <project>/<app-module>/build.gradle.kts หรือ <project>/<app-module>/build.gradle) ให้เพิ่มทรัพยากร Dependency สำหรับคลัง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

ก่อนเริ่มขั้นตอนการยืนยัน คุณสามารถตรวจสอบว่าอุปกรณ์และซิมการ์ดรองรับการยืนยันหมายเลขโทรศัพท์ที่อิงตาม 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 โดยมี 1 รายการสำหรับแต่ละช่องใส่ซิม หากระบบรองรับซิมการ์ดอย่างน้อย 1 รายการ คุณจะ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 ใดก็ได้เพื่อยืนยันโทเค็น ใช้ไลบรารีเพื่อยืนยันข้อมูลต่อไปนี้ทั้งหมด

  • โทเค็นได้รับการลงนามโดยใช้คีย์ใดคีย์หนึ่งที่เผยแพร่ในปลายทาง Firebase PNVJWKS

    https://fpnv.googleapis.com/v1beta/jwks
    
  • การอ้างสิทธิ์ของกลุ่มเป้าหมายและผู้ออกจะประกอบด้วยหมายเลขโปรเจ็กต์ Firebase ของคุณและอยู่ในรูปแบบต่อไปนี้

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

    คุณดูหมายเลขโปรเจ็กต์ Firebase ได้ในหน้าการตั้งค่าโปรเจ็กต์ ของคอนโซล Firebase

  • โทเค็นยังไม่หมดอายุ

ตัวอย่าง

ตัวอย่างสั้นๆ เช่น แอป Express.js ต่อไปนี้จะรับโทเค็น Firebase PNV จากคำขอ POST HTTP และใช้ไลบรารีการยืนยัน 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