Trang này mô tả cách sử dụng Firebase Phone Number Verification trong một ứng dụng Android. Hãy xem phần tổng quan để biết nội dung mô tả chung về tính năng này.
Trang này trình bày chi tiết cách tích hợp với Firebase PNV bằng API hợp nhất, một lệnh gọi duy nhất. Việc gọi một phương thức duy nhất sẽ xử lý toàn bộ quy trình người dùng Firebase PNV, từ việc lấy sự đồng ý của người dùng cho đến việc thực hiện các lệnh gọi mạng cần thiết đến phần phụ trợ Firebase PNV. Bằng cách sử dụng phương thức này, bạn sẽ giảm các bước tích hợp xuống thành một lệnh gọi phương thức duy nhất.
API này được đề xuất cho hầu hết các nhà phát triển; tuy nhiên, nếu bạn có các yêu cầu cụ thể mà thư viện không đáp ứng được, hãy xem trang Tuỳ chỉnh quy trình Firebase Phone Number Verification để biết thông tin về cách triển khai quy trình tuỳ chỉnh.
Trước khi bắt đầu
Bạn phải xuất bản chính sách quyền riêng tư của ứng dụng trên một trang web có thể truy cập công khai. Trên trang này, bạn phải giải thích cho người dùng cách bạn sử dụng số điện thoại được truy xuất bằng Firebase Phone Number Verification. Thư viện Firebase PNV sẽ liên kết đến trang này khi yêu cầu người dùng đồng ý chia sẻ số điện thoại của họ với ứng dụng của bạn.
1. Thiết lập dự án Firebase
Thêm Firebase vào dự án Android nếu bạn chưa thực hiện.
Firebase PNV yêu cầu gói Blaze. Nếu bạn chưa nâng cấp dự án của mình lên Gói giá linh hoạt (trả tiền theo mức dùng), hãy nâng cấp.
Mặc dù Firebase PNV yêu cầu bạn phải đính kèm một tài khoản thanh toán vào dự án Firebase của mình, nhưng trong giai đoạn xem trước, bạn sẽ không bị tính phí cho dịch vụ này.
Nếu bạn chưa chỉ định vân tay SHA-256 của ứng dụng trong bảng điều khiển Firebase, hãy làm như vậy trong phần Cài đặt dự án. Hãy tham khảo phần Xác thực ứng dụng để biết thông tin chi tiết về cách lấy dấu vân tay SHA-256 của ứng dụng.
Mở dự án Firebase của bạn trong bảng điều khiển Google Cloud rồi bật API Firebase Phone Number Verification.
Trên trang Thông tin xác thực của bảng điều khiển, hãy mở khoá API Android rồi thêm API Firebase Phone Number Verification vào danh sách các API đã chọn.
2. Thêm thư viện Firebase PNV vào ứng dụng của bạn
Trong tệp Gradle (cấp ứng dụng) của mô-đun (thường là <project>/<app-module>/build.gradle.kts
hoặc <project>/<app-module>/build.gradle
), hãy thêm phần phụ thuộc cho thư viện Firebase Phone Number Verification cho Android.
dependencies {
// Add the dependency for the Firebase Phone Number Verification library
implementation("com.google.firebase:firebase-pnv:16.0.0-beta01")
}
3. Không bắt buộc: Kiểm tra xem có hỗ trợ Firebase PNV hay không
Trước khi bắt đầu quy trình xác minh, bạn có thể kiểm tra xem thiết bị và thẻ SIM của thiết bị có hỗ trợ quy trình xác minh số điện thoại dựa trên API hay không. Đây là một bước kiểm tra trước và không yêu cầu sự đồng ý của người dùng. Bạn có thể sử dụng kết quả của kiểm thử này để quyết định có nên bắt đầu quy trình Firebase PNV hay sử dụng một phương thức xác minh số điện thoại thay thế, chẳng hạn như SMS.
Để kiểm tra khả năng tương thích của thiết bị, hãy gọi phương thức 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()
trả về một danh sách các đối tượng VerificationSupportResult
, mỗi đối tượng cho một khe cắm SIM. Nếu có ít nhất một thẻ SIM được hỗ trợ, bạn có thể tiếp tục quy trình Firebase PNV.
4. Bắt đầu quy trình xác minh
Để bắt đầu quy trình Firebase PNV, hãy tạo một phiên bản mới của FirebasePhoneNumberVerification
, truyền vào một ngữ cảnh Activity
. Cần có ngữ cảnh Activity
để SDK trình bày màn hình đồng ý cho người dùng. Sau đó, hãy gọi phương thức getVerifiedPhoneNumber()
của đối tượng:
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.
}
Phương thức getVerifiedPhoneNumber()
thực hiện toàn bộ quy trình xác minh số điện thoại, bao gồm:
- Sử dụng Trình quản lý thông tin xác thực Android để có được sự đồng ý của người dùng về việc chia sẻ số điện thoại của họ.
- Đưa ra yêu cầu đối với phần phụ trợ Firebase PNV.
- Trả về một số điện thoại đã xác minh cho thiết bị.
5. Sử dụng mã thông báo Firebase PNV
Nếu quy trình thành công, phương thức getVerifiedPhoneNumber()
sẽ trả về số điện thoại đã xác minh và một mã thông báo đã ký chứa số điện thoại đó. Bạn có thể sử dụng dữ liệu này trong ứng dụng của mình theo quy định trong chính sách quyền riêng tư.
Nếu sử dụng số điện thoại đã xác minh bên ngoài ứng dụng khách, bạn nên truyền mã thông báo thay vì chính số điện thoại để có thể xác minh tính toàn vẹn của số điện thoại khi sử dụng. Để xác minh mã thông báo, bạn có thể sử dụng bất kỳ thư viện xác minh JWT nào. Sử dụng thư viện này để xác minh tất cả những điều sau:
Mã thông báo được ký bằng một trong các khoá được xuất bản tại điểm cuối JWKS Firebase PNV:
https://fpnv.googleapis.com/v1beta/jwks
Các giá trị nhận dạng đối tượng và tổ chức phát hành chứa số dự án Firebase của bạn và có định dạng như sau:
https://fpnv.googleapis.com/projects/FIREBASE_PROJECT_NUMBER
Bạn có thể tìm thấy số dự án Firebase trên trang Cài đặt dự án của bảng điều khiển Firebase.
Mã thông báo chưa hết hạn.
Ví dụ
Ví dụ ngắn gọn: ứng dụng Express.js sau đây nhận mã thông báo Firebase PNV từ một yêu cầu HTTP POST
và sử dụng thư viện xác minh JWT để kiểm tra chữ ký và các yêu cầu của mã thông báo:
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);
Đăng nhập vào một ứng dụng Firebase
Để xem ví dụ về cách sử dụng mã thông báo Firebase PNV trong quy trình đăng nhập Firebase Authentication, hãy xem trang Xác thực bằng Firebase bằng Firebase Phone Number Verification.