이 페이지에서는 Android 앱에서 Firebase Phone Number Verification를 사용하는 방법을 설명합니다. 이 기능에 관한 일반적인 설명은 개요를 참고하세요.
이 페이지에서는 통합된 단일 호출 API를 사용하여 Firebase PNV와 통합하는 방법을 자세히 설명합니다. 단일 메서드를 호출하면 사용자 동의를 얻는 것부터 Firebase PNV 백엔드에 필요한 네트워크 호출을 하는 것까지 전체 Firebase PNV 사용자 흐름이 처리됩니다. 이 방법을 사용하면 통합 단계를 단일 메서드 호출로 줄일 수 있습니다.
이 API는 대부분의 개발자에게 권장되지만, 라이브러리에서 충족되지 않는 특정 요구사항이 있는 경우 Firebase Phone Number Verification 흐름 맞춤설정 페이지에서 맞춤 흐름 구현에 관한 정보를 확인하세요.
시작하기 전에
앱의 개인정보처리방침을 공개적으로 제공되는 웹사이트에 게시해야 합니다. 이 페이지에서 Firebase Phone Number Verification를 사용하여 가져온 전화번호를 사용하는 방법을 사용자에게 설명해야 합니다. Firebase PNV 라이브러리는 사용자에게 앱과 전화번호를 공유하도록 동의를 요청할 때 이 페이지로 연결됩니다.
1. Firebase 프로젝트 설정
아직 추가하지 않았다면 Android 프로젝트에 Firebase를 추가합니다.
Firebase PNV에는 Blaze 요금제가 필요합니다. 프로젝트를 사용한 만큼만 지불하는 Blaze 요금제로 아직 업그레이드하지 않은 경우 업그레이드하세요.
Firebase 콘솔에서 아직 앱의 SHA-256 디지털 지문을 지정하지 않았다면 프로젝트 설정에서 지정합니다. 앱의 SHA-256 디지털 지문을 얻는 방법에 대한 자세한 내용은 클라이언트 인증을 참고하세요.
Google Cloud 콘솔에서 Firebase 프로젝트를 열고 Firebase Phone Number Verification API를 사용 설정합니다.
콘솔의 사용자 인증 정보 페이지에서 Android API 키를 열고 선택한 API 목록에 Firebase Phone Number Verification API를 추가합니다.
2. 앱에 Firebase PNV 라이브러리 추가
모듈 (앱 수준) Gradle 파일 (일반적으로 <project>/<app-module>/build.gradle.kts
또는 <project>/<app-module>/build.gradle
)에서 Android용 Firebase Phone Number Verification 라이브러리의 종속 항목을 추가합니다.
dependencies {
// Add the dependency for the Firebase Phone Number Verification library
implementation("com.google.firebase:firebase-pnv:16.0.0-beta01")
}
3. 선택사항: Firebase PNV 지원 확인
인증 흐름을 시작하기 전에 기기와 SIM 카드가 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()
는 SIM 슬롯별로 하나씩 있는 VerificationSupportResult
객체 목록을 반환합니다. 하나 이상의 SIM 카드가 지원되는 경우 Firebase PNV 흐름을 진행할 수 있습니다.
4. 인증 흐름 시작
Firebase PNV 흐름을 시작하려면 Activity
컨텍스트를 전달하여 FirebasePhoneNumberVerification
의 새 인스턴스를 만듭니다. SDK가 사용자에게 동의 화면을 표시하려면 Activity
컨텍스트가 필요합니다. 그런 다음 객체의 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 Credential Manager를 사용하여 사용자가 전화번호를 공유하는 데 동의하도록 합니다.
- Firebase PNV 백엔드에 요청합니다.
- 기기의 인증된 전화번호를 반환합니다.
5. Firebase PNV 토큰 사용
흐름이 성공하면 getVerifiedPhoneNumber()
메서드는 인증된 전화번호와 이를 포함하는 서명된 토큰을 반환합니다. 개인정보처리방침에 설명된 대로 앱에서 이 데이터를 사용할 수 있습니다.
앱 클라이언트 외부에서 인증된 전화번호를 사용하는 경우 전화번호 자체 대신 토큰을 전달하여 사용할 때 무결성을 확인할 수 있습니다. 토큰을 확인하려면 JWT 확인 라이브러리를 사용하면 됩니다. 라이브러리를 사용하여 다음을 모두 확인합니다.
토큰은 Firebase PNV JWKS 엔드포인트에 게시된 키 중 하나를 사용하여 서명됩니다.
https://fpnv.googleapis.com/v1beta/jwks
잠재고객 및 발급자 클레임에는 Firebase 프로젝트 번호가 포함되며 형식은 다음과 같습니다.
https://fpnv.googleapis.com/projects/FIREBASE_PROJECT_NUMBER
Firebase 프로젝트 번호는 Firebase Console의 프로젝트 설정 페이지에서 확인할 수 있습니다.
토큰이 만료되지 않았습니다.
예
간단한 예로 다음 Express.js 앱은 HTTP POST
요청에서 Firebase PNV 토큰을 수신하고 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 Authentication 로그인 흐름에서 Firebase PNV 토큰을 사용하는 예시는 Firebase Phone Number Verification를 사용하여 Firebase에 인증 페이지를 참고하세요.