개요
Flutter프로젝트에서 Firebase를 이용하여 SMS 인증하는 방식에 대해서 글을 정리해보려고 한다.
[Flutter] Firebase 안드로이드, IOS 설정
위의 두 가지가 준비 되어야 한다.
사용자에게 서비스를 제공할 때 본인인증 방식으로 SMS 인증을 많이 하는데 Firebase에서는 전화, 이메일, SNS, 포털사이트 등의 인증 연동 방식을 제공하고 있다.
본문
1. Firebase core 설치
flutter pub add firebase_core
프로젝트 터미널에서 flutter pub add firebase_core 명령어를 실행하여 pubspec.yaml에 디펜던시를 추가한다. Firebase 기능을 이용하려면 core는 기본적으로 있어야 한다.
2. Firebase auth 설치
flutter pub add firebase_auth
프로젝트 터미널에서 flutter pub add firebase_auth 명령어를 실행하여 pubspec.yaml에 디펜던시를 추가한다.
3. Firebase SHA 인증서 지문 등록
./gradlew signingReport
프로젝트 터미널에서 ./gradlew signingReport 명령어를 실행하면 안드로이드 SHA1과 SHA-256가 나오는데 둘 중 하나만 등록해도 되고 둘 다 등록해도 된다.
Firebase 콘솔로 가서 [프로젝트 설정] -> [내 앱] -> [디지털 지문 추가]로 SHA1과 SHA-256 지문을 등록하자. Auth 서비스는 SHA 인증이 되어야만 가능하니 필수로 설정해주자.
4. main.dart에 Firebase init
void main() async {
WidgetsFlutterBinding.ensureInitialized(); // 비동기 사용시 추가
await Firebase.initializeApp(); // 필수추가
runApp(MyApp());
}
- main 메소드가 비동기일 경우 WidgetsFlutterBinding.ensureInitialized(); 을 추가한다.
- Firebase 초기화를 위해 await Firebase.initializeApp(); 을 추가한다.
5. Firebase Auth 인증 문자 전송
FirebaseAuth _auth = FirebaseAuth.instance;
_auth.verifyPhoneNumber(phoneNumber : _phoneNumber,
verificationCompleted: (PhoneAuthCredential credential) async {
print('인증 문자 수신');
},
verificationFailed: (FirebaseAuthException e) {
print('인증 문자 전송 실패');
},
codeSent: (String verificationId, int? resendToken) async {
print('인증 문자 전송');
_verificationId = verificationId; // 인증 코드 확인때 필요한 값
},
codeAutoRetrievalTimeout: (String verificationId){});
- FirebaseAuth.instance로 인스턴스 생성
- phoneNumber : 전화번호인데 국가코드로 시작해야 한다. (+821099998888) 맨 앞자리 0을 +82(한국 코드)로 치환하자.
- verifyPhoneNumber 메소드를 이용하여 phoneNumber와, completed, failed, codeSent등 콜백 메소드를 전달
- verificationCompleted : 자동 SMS 코드 확인을 지원하는 기기에서만 호출된다.
- verificationFailed : 잘못된 전화번호 또는 SMS 할당량이 초과하면 FirebaseAuthException이 발생된다.
- codeSent : SMS 전송이 되면 verificationId가 반환이 되는데 이 값은 나중에 코드 인증할 때 필요하니 반드시 변수에 담아두자.
6. SMS 인증 코드 확인
PhoneAuthCredential credential = PhoneAuthProvider.credential(verificationId: _verificationId, smsCode: code);
final UserCredential authCredential = _auth.signInWithCredential(credential);
인증 문자 코드를 SMS로 수신받은 후 인증 코드를 확인하는 코드이다.
- 전송 때 반환받은 verificationId와 SMS로 받은 인증코드로 PhoneAuthCredential를 생성
- FirebaseAuth의 signInWithCredential 메소드에 PhoneAuthCredential 전달
마무리
SMS 인증 요금방식을 살펴보면
SMS는 전화 인증에 해당되는데 월 SMS 발송이 10000건까지는 무료이나 10000건이 넘어가면 1건당 0.06달러가 발생하게 된다. 대략 80원이다. 국내 문자 인증 서비스는 평균 1건당 10원~15원 한다. 최저가를 찾다 보면 7원 8원으로 제공하는 서비스도 있다.
테스트나 한 달에 10000건 이하로 인증하는 서비스는 Firebase를 고려하면 되고 많은 인증이 필요하면 저렴한 서비스를 찾아서 연동하는 게 좋다고 생각된다.
'Flutter' 카테고리의 다른 글
[Flutter] GetX - 라우트 관리 (0) | 2022.12.20 |
---|---|
[Flutter] GetX - 상태관리 (0) | 2022.12.19 |
[Flutter] Firebase 안드로이드, IOS 설정 (0) | 2022.12.17 |
[Flutter] Freezed 추천 라이브러리 (0) | 2022.12.16 |
[Flutter] zsh: command not found (0) | 2022.12.01 |
댓글