본문 바로가기
Flutter

[Flutter] Firebase 안드로이드 SMS 인증

by 가드 2022. 12. 18.
728x90

 개요

Flutter프로젝트에서 Firebase를 이용하여 SMS 인증하는 방식에 대해서 글을 정리해보려고 한다.

Firebase 프로젝트 생성

[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 setting

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 인증 요금방식을 살펴보면

firebase sms

SMS는 전화 인증에 해당되는데 월 SMS 발송이 10000건까지는 무료이나 10000건이 넘어가면 1건당 0.06달러가 발생하게 된다. 대략 80원이다. 국내 문자 인증 서비스는 평균 1건당 10원~15원 한다. 최저가를 찾다 보면 7원 8원으로 제공하는 서비스도 있다.

테스트나 한 달에 10000건 이하로 인증하는 서비스는 Firebase를 고려하면 되고 많은 인증이 필요하면 저렴한 서비스를 찾아서 연동하는 게 좋다고 생각된다.

300x250

'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

댓글