본문 바로가기
iOS

[iOS] Firebase Auth (파이어베이스 인증) 전화번호 인증 처리

by Odin_1204 2022. 12. 12.
그대의 이름도 성도 난 필요없소
하지만 정말 나 원하는게 하나있소

니 전화번호~ 🤙🏻

 

 

 

 

안녕하세요. 오딘(Odin)입니다.

 

여러분 오랜만입니다~😁
제가 또 새로운 프로젝트를 하느라 블로그 작성을 쉬었는데요! ㅎㅎ

이번 프로젝트를 만들면서 알게되거나 어려웠던 부분들을 정리해보려고 합니다!!

아주 신기하고 재미난 것들이 많을거니 기대하셔도 좋습니다~

 

우선 첫번째로!!

Firebase Auth를 활용한 전화번호 인증입니다.

다양한 앱을 사용하다보면 휴대폰 인증을 통해 회원가입을 하는 경우가 있습니다.

 

저 또한 이번에 Firebase를 이용하여 전화번호 인증 작업을 하였는데요.

생각보다 간단하더라구요~!!

그러면 우리 같이 로그인 해볼까요??

 

 

 

 


 

FirebaseAuth 적용하기

Firebase Auth 사이트-> https://firebase.google.com/docs/auth/ios/phone-auth

 

(자세하게 잘 나와 있으서 이거 보고 하셔도 됩니당)

 

초기 setting

Firebase 초기 setting은 블로그에 작성해 두었으니 보고 작업하시면 될겁니다!!

-> https://odinios.tistory.com/11

 

 

package Product들 중에 다음 두 개는 꼭 체크해주세요~

ㅁ FirebaseAuth
ㅁ FirebaseMessaging

 

 

 

FirebaseAuth 전화 인증

전화번호 인증을 사용하려면 Firebase에서 전화번호 로그인 요청이 내 앱에서 발생한 것인지 확인할 수 있어야 합니다.

  1. Silent APN 알림 : 기기에서 처음으로 전화번호를 통해 사용자를 로그인 처리하면 Firebase 인증에서 사용자 모르게 기기로 푸시 알림을 전송하여 토큰을 보냅니다.
    • iOS 8.0이상은 silent notification은 사용자의 권한요청이 필수가 아닙니다.
  2. reCAPTCHA 인증 : 사용자가 앱의 백그라운드 새로고침을 중지했거나 iOS 시뮬레이터에서 앱을 테스트하는 경우와 같이 자동 푸시 알림을 주고받을 수 없는 경우, Firebase 인증은 reCAPTCHA 인증을 사용하여 전화번호 로그인 과정을 완료합니다.

저희는 실제 Message로 인증번호를 받는 reCAPTCHA 방식으로 해보려고 합니다.

 

 

reCAPTCHA

1) GoogleService-Info.plist 구성 파일을 열고 REVERSED_CLIENT_ID 키를 복사합니다.

 

2) URL Type 에 새로운 구성표를 추가하고 URL Schemes에 붙여넣어 줍니다.

 

 

동작 Flow

FirebaseidToken을 받아 해당 토큰을 받는게 목표이며

받은 Token을 통해 서버에서 가입 현황, 로그인, 회원가입 등을 한다고 보시면 됩니다.

 

 

 

 

전화번호 입력 & VerificationID, 인증번호 받기

// 전화번호 입력하기 버튼 눌렀을 떄
PhoneAuthProvider.provider()
  .verifyPhoneNumber(phoneNumber, uiDelegate: nil) { verificationID, error in
      if let error = error {
        self.showMessagePrompt(error.localizedDescription)
        return
      }
      
      // 서버 통신 성공, verificationID를 저장
      if let verificationID = verificationID {
   		 LocalUserDefaults.shared.set(key: .verificationID, value: verificationID)
         // 화면 전환
	}
  }

 

 

 

인증번호 입력 & FirebaseidToken 받기

let verificationID: String? = LocalUserDefaults.shared.value(key: .verificationID)

// FIRPhoneAuthCredential 객체 만들기
let credential = PhoneAuthProvider.provider().credential(
    withVerificationID: verificationID!,
    verificationCode: certificationNumber
)

Auth.auth().signIn(with: credential) { authData, error in

    if let error = error {
        guard let errorCode = (error as? NSError)?.code else {return}
        print("errorCode: \(errorCode)")
    }

	// 성공시 CurrentUser IDTokenRefresh처리
    let currentUser = Auth.auth().currentUser
    currentUser?.getIDTokenForcingRefresh(true) { idToken, error in
        if let error = error {
            print(error)
            return
        }

        // FirebaseidToken 받기 완료
        LocalUserDefaults.shared.set(key: .FirebaseidToken, value: idToken)
    }
}

 

 

 

 

 

성공 영상

 

 

 

 

 

 

 


참조

https://velog.io/@sookim-1/iOS-FireBase%EB%A5%BC-%ED%86%B5%ED%95%9C-SMS%EC%A0%84%ED%99%94%EB%B2%88%ED%98%B8-%EC%9D%B8%EC%A6%9D%ED%95%98%EA%B8%B0