หน้านี้อธิบายวิธีเริ่มต้นใช้งาน Firebase Phone Number Verification ในแอป Android ดูคำอธิบายทั่วไปของฟีเจอร์นี้ได้ที่ภาพรวม
เมื่อทำตามขั้นตอนในหน้านี้ คุณจะเริ่มใช้โฟลว์ผู้ใช้สำหรับ Firebase PNV ได้อย่างรวดเร็ว เพื่อวัตถุประสงค์ในการทดสอบ คุณจะต้องสร้างโทเค็นสำหรับการทดสอบเท่านั้นซึ่งจะแปลงเป็นหมายเลขโทรศัพท์ปลอม เมื่อใช้โทเค็นทดสอบนี้ คุณจะเริ่มเพิ่ม Firebase PNV ลงในแอปได้โดยไม่ต้องมีบัญชีสำหรับการเรียกเก็บเงินหรืออุปกรณ์ที่มีซิมจริง
เมื่อพอใจกับประสบการณ์ของผู้ใช้ Firebase PNV ในแอปแล้ว คุณสามารถทำตามขั้นตอนเพิ่มเติมเพื่อทำให้แอปพร้อมใช้งานจริงได้
ก่อนเริ่มต้น
เพิ่ม Firebase ลงในโปรเจ็กต์ Android หากยังไม่ได้เพิ่ม
ตรวจสอบว่าแอปเป็นไปตามข้อกำหนดต่อไปนี้
minSdkของแอปคือ 24 (Android 7.0) ขึ้นไป- อุปกรณ์หรือโปรแกรมจำลองมีบริการ Google Play สำหรับโปรแกรมจำลอง ให้ใช้ภาพระบบที่มี Google Play
- หากต้องการยืนยันหมายเลขโทรศัพท์จริงในเวอร์ชันที่ใช้งานจริง อุปกรณ์ต้องใช้ Android 9 (ระดับ API 28) ขึ้นไปและใช้ซิมจากผู้ให้บริการที่รองรับ โหมดทดสอบที่อธิบายไว้ในหน้านี้ไม่จำเป็นต้องใช้ซิมจริง
1. เพิ่มไลบรารี Firebase PNV ลงในแอป
ในไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยปกติคือ<project>/<app-module>/build.gradle.kts หรือ <project>/<app-module>/build.gradle) ให้เพิ่มทรัพยากร Dependency สำหรับไลบรารี Firebase Phone Number Verification สำหรับ Android เราขอแนะนำให้ใช้
Firebase Android BoM
เพื่อควบคุมการกำหนดเวอร์ชันของไลบรารี
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:35.1.0")) // Add the dependencies for the Firebase Phone Number Verification libraries // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-pnv") }
การใช้ Firebase Android BoM จะทำให้แอปใช้ไลบรารี Firebase Android เวอร์ชันที่เข้ากันได้อยู่เสมอ
(ทางเลือก) เพิ่มทรัพยากร Dependency ของไลบรารี Firebase โดยไม่ใช้ BoM
หากเลือกที่จะไม่ใช้ Firebase BoM คุณต้องระบุเวอร์ชันของไลบรารี Firebase แต่ละเวอร์ชันในบรรทัดทรัพยากร Dependency
โปรดทราบว่าหากคุณใช้ไลบรารี Firebase หลายรายการในแอป เราขอแนะนำอย่างยิ่งให้ใช้ BoM เพื่อจัดการเวอร์ชันไลบรารี ซึ่งจะช่วยให้มั่นใจได้ว่าทุกเวอร์ชันจะเข้ากันได้
dependencies { // Add the dependencies for the Firebase Phone Number Verification libraries // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-pnv:17.0.0") }
2. เริ่มต้นไลบรารี Firebase PNV ในโหมดทดสอบ
ในคอนโซล Firebase ให้ไปที่แท็บความปลอดภัย > การยืนยันทางโทรศัพท์ > การตั้งค่า > การทดสอบ
คลิกสร้างโทเค็น เลือกรหัสประเทศ แล้วคลิกสร้างโทเค็นอีกครั้งเพื่อสร้างและคัดลอกโทเค็น
ทำให้โทเค็นพร้อมใช้งานสำหรับบิลด์การแก้ไขข้อบกพร่องของแอปโดยไม่ต้องฮาร์ดโค้ดในซอร์สโค้ด โปรดดูแลโทเค็นให้เหมือนกับข้อมูลเข้าสู่ระบบและเก็บไว้นอกการควบคุมเวอร์ชัน เช่น เพิ่มลงในไฟล์
local.propertiesของโปรเจ็กต์ ซึ่งไม่ได้เช็คอินลงในการควบคุมเวอร์ชันfpnv.testToken=COPIED_TOKEN_STRINGจากนั้นแสดงเป็นช่อง
BuildConfigในไฟล์build.gradle.ktsระดับโมดูล (ระดับแอป) ตัวอย่างต่อไปนี้ยังอ่านตัวแปรสภาพแวดล้อมFPNV_TEST_TOKENด้วย ซึ่งมีประโยชน์ในเซิร์ฟเวอร์ CI ที่ไม่มีไฟล์local.propertiesบิลด์ที่เผยแพร่จะได้รับค่าว่าง ดังนี้// At the top of the file: import java.util.Properties val localProperties = Properties().apply { rootProject.file("local.properties").takeIf { it.exists() } ?.inputStream()?.use { load(it) } } val fpnvTestToken = System.getenv("FPNV_TEST_TOKEN")?.takeIf { it.isNotEmpty() } ?: localProperties.getProperty("fpnv.testToken", "") android { buildFeatures { buildConfig = true } buildTypes { debug { buildConfigField("String", "FPNV_TEST_TOKEN", "\"$fpnvTestToken\"") } release { buildConfigField("String", "FPNV_TEST_TOKEN", "\"\"") } } }ในแอป ให้เปิดใช้เซสชันทดสอบ 1 ครั้งต่อกระบวนการของแอป โดยทำดังนี้
Kotlin
FirebasePhoneNumberVerification.getInstance()จะแสดงผลอินสแตนซ์เดียวกันสำหรับFirebaseAppเริ่มต้นทุกครั้งที่คุณเรียกใช้ ดังนั้นให้ใช้เมธอดนี้สำหรับการเรียกใช้ Firebase PNV ทั้งหมดเรียกใช้
enableTestSession()เพียงครั้งเดียวต่อกระบวนการของแอป การเรียกครั้งที่ 2 จะแสดงFirebasePhoneNumberVerificationExceptionพร้อมรหัสข้อผิดพลาดTEST_SESSION_ALREADY_ENABLEDดังนั้นอย่าเรียกจากActivityซึ่งสามารถสร้างใหม่ได้ (เช่น เมื่อหน้าจอหมุน) แต่ให้เรียกใช้จากคลาสApplicationแทน ดังนี้import android.app.Application import android.util.Log import com.google.firebase.pnv.FirebasePhoneNumberVerification class MyApplication : Application() { override fun onCreate() { super.onCreate() if (!BuildConfig.DEBUG) return if (BuildConfig.FPNV_TEST_TOKEN.isEmpty()) { Log.w("MyApplication", "No Firebase PNV test token; test mode is off.") return } FirebasePhoneNumberVerification.getInstance() .enableTestSession(BuildConfig.FPNV_TEST_TOKEN) } }ลงทะเบียนคลาสในไฟล์ Manifest ของแอป ดังนี้
<application android:name=".MyApplication" ... >
โทเค็นทดสอบมี TTL 7 วัน หลังจากระยะเวลานี้ คุณจะต้องสร้างโทเค็นใหม่เพื่อเปิดใช้เซสชันทดสอบ โทเค็นที่หมดอายุจะไม่ทำให้เกิดข้อผิดพลาดจนกว่าคุณจะเรียกใช้ getVerifiedPhoneNumber() โทเค็นทดสอบจะทำงานในอุปกรณ์จริงและโปรแกรมจำลองที่มีบริการ Google Play จึงเหมาะอย่างยิ่งสำหรับการสร้างต้นแบบ UX ในแอป นอกจากนี้ คุณยังใช้โทเค็นทดสอบสำหรับการทดสอบใน CI/CD ได้ด้วยหากเปลี่ยนโทเค็นอย่างน้อยทุก 7 วัน
โทเค็นหมายเลขโทรศัพท์ที่แอปได้รับในโหมดทดสอบจะได้รับการรับรองเหมือนโทเค็นเวอร์ชันที่ใช้งานจริง แต่จะมีคำกล่าวอ้าง "test_number": true ตรวจสอบว่าแบ็กเอนด์เวอร์ชันที่ใช้งานจริงปฏิเสธโทเค็นที่มีการอ้างสิทธิ์นี้
3. แนะนำ: ตรวจสอบการรองรับ Firebase PNV
เพื่อช่วยคุณพิจารณาว่าจะแสดง UI การป้อนหมายเลขหรือ UI อธิบายเมื่อใด เราขอแนะนำให้ตรวจสอบว่าอุปกรณ์และซิมการ์ดรองรับ Firebase PNV หรือไม่เมื่อเปิดแอป ซึ่งเป็นการตรวจสอบล่วงหน้าที่ไม่ต้องได้รับความยินยอมจากผู้ใช้ คุณสามารถใช้ผลลัพธ์ของการทดสอบนี้เพื่อตัดสินใจว่าจะเริ่มขั้นตอน Firebase PNV หรือใช้วิธีอื่นในการยืนยันหมายเลขโทรศัพท์ เช่น SMS
หากต้องการตรวจสอบความเข้ากันได้ของอุปกรณ์ ให้เรียกใช้เมธอด getVerificationSupportInfo() ขณะที่คุณมีเซสชันการทดสอบที่ใช้งานอยู่ เมธอดนี้จะแสดงรายการที่มีรายการเดียวที่รองรับสำหรับโทเค็นทดสอบเสมอ โดยไม่ต้องติดต่อแบ็กเอนด์ของ Firebase PNV ซึ่งหมายความว่าคุณจะใช้โหมดสำรองสำหรับอุปกรณ์ที่ไม่รองรับในโหมดทดสอบไม่ได้ หลังจากนั้น เมื่อคุณทำให้แอปพร้อมใช้งานจริงแล้ว เมธอดนี้จะแสดงผลลัพธ์สำหรับซิมแต่ละอันในอุปกรณ์
Kotlin
val fpnv = FirebasePhoneNumberVerification.getInstance()
// Check all SIMs for support.
fpnv.getVerificationSupportInfo()
.addOnSuccessListener { results ->
if (results.any { it.isSupported() }) {
// At least one SIM is supported; okay to call getVerifiedPhoneNumber
// (see the next step).
} else {
// No SIMs are supported, so fall back to SMS verification.
}
}
.addOnFailureListener { e ->
// Handle error.
}
4. เริ่มขั้นตอนการยืนยัน
หากต้องการเริ่มขั้นตอน Firebase PNV ให้เรียกใช้เมธอด getVerifiedPhoneNumber() ส่ง Activity เนื่องจากเมธอดจะแสดงหน้าจอขอความยินยอม Context ที่ไม่ใช่ Activity เช่น บริบท Application จะดำเนินการไม่สำเร็จพร้อมรหัสข้อผิดพลาด ACTIVITY_CONTEXT_REQUIRED
Kotlin
fpnv.getVerifiedPhoneNumber(this@MainActivity)
.addOnSuccessListener { result ->
// In test mode, this phone number will have a valid country code,
// followed by all zeros.
val phoneNumber = result.getPhoneNumber() // For display only.
val token = result.getToken()
// Verification successful. Send token to your backend, which reads
// the verified phone number from it. (See Next steps.)
}
.addOnFailureListener { e ->
// Handle failures, such as the user declining consent or a network
// error.
}
เมธอด getVerifiedPhoneNumber() จะดำเนินการตามขั้นตอนการยืนยันหมายเลขโทรศัพท์ทั้งหมด ซึ่งรวมถึงสิ่งต่อไปนี้
- ใช้ Android Credential Manager เพื่อขอความยินยอมของผู้ใช้ในการแชร์หมายเลขโทรศัพท์
- กำลังส่งคำขอไปยังแบ็กเอนด์ของ Firebase PNV
- แสดงผลโทเค็นที่มีหมายเลขโทรศัพท์ที่ยืนยันแล้วสำหรับอุปกรณ์ (ในแอปเวอร์ชันที่ใช้งานจริง ขั้นตอนนี้คือขั้นตอนที่เกิดการเรียกเก็บเงิน)
5. จัดการข้อผิดพลาด
เมื่อการเรียก Firebase PNV ล้มเหลว ข้อยกเว้นจะเป็น FirebasePhoneNumberVerificationException ใช้ errorCode เพื่อตัดสินใจว่าจะทำอะไรต่อไป เช่น กลับไปใช้การยืนยันทาง SMS เมื่อผู้ใช้ปฏิเสธความยินยอม ดูจัดการข้อผิดพลาด Firebase PNV ใน Android สำหรับรหัสข้อผิดพลาดทุกรหัส เมื่อเกิดข้อผิดพลาด และการดำเนินการที่แนะนำ
ขั้นตอนถัดไป
หน้านี้จะอธิบายวิธีผสานรวมกับ Firebase PNV โดยใช้ API แบบเรียกใช้ครั้งเดียวที่รวมเป็นหนึ่งเดียว การเรียกใช้เมธอดเดียวจะจัดการโฟลว์ผู้ใช้ Firebase PNV ทั้งหมด ตั้งแต่การขอความยินยอมของผู้ใช้ไปจนถึงการเรียกใช้เครือข่ายที่จำเป็นไปยังแบ็กเอนด์ Firebase PNV การใช้วิธีนี้จะช่วยลดขั้นตอนการผสานรวมให้เหลือเพียงการเรียกใช้เมธอดเดียว
เราขอแนะนำ API นี้สำหรับนักพัฒนาแอปส่วนใหญ่ แต่หากคุณมีข้อกำหนดเฉพาะที่ไลบรารีไม่รองรับ โปรดดูข้อมูลเกี่ยวกับการใช้ขั้นตอนที่กำหนดเองในหน้าปรับแต่งขั้นตอน Firebase Phone Number Verification
หากใช้หมายเลขโทรศัพท์ที่ยืนยันแล้วนอกไคลเอ็นต์แอป คุณควรส่งโทเค็นแทนหมายเลขโทรศัพท์ เพื่อให้คุณสามารถยืนยันความสมบูรณ์ของโทเค็นเมื่อใช้งานได้ ดูยืนยันโทเค็น Firebase PNV
หากต้องการให้ผู้ใช้ลงชื่อเข้าใช้ Firebase Authentication ด้วยหมายเลขโทรศัพท์ที่ยืนยันแล้ว โปรดดูหัวข้อตรวจสอบสิทธิ์ด้วย Firebase โดยใช้ Firebase Phone Number Verification
หากต้องการดูคำแนะนำทีละขั้นตอนซึ่งจะสร้างแอปตัวอย่างที่สมบูรณ์ ให้ลองใช้ Codelab ของ Firebase Phone Number Verification
หลังจากติดตั้งใช้งานและทดสอบขั้นตอน Firebase PNV ของแอปและการผสานรวมแบ็กเอนด์แล้ว คุณสามารถนำแอปไปใช้งานจริงเพื่อเริ่มรับหมายเลขโทรศัพท์ที่ได้รับการยืนยันจริง ดูหัวข้ออัปเกรดเป็นโหมดโปรดักชัน
ดู API ทั้งหมดได้ที่เอกสารอ้างอิง API ของ Firebase PNV