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

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

  • ตั้งค่าส่วนหัว 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 จากคำขอ 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