본문 바로가기
2023년 이전/Firebase

Firebase 전화번호 인증

by JeongUPark 2020. 9. 3.
반응형

사이드 프로젝트를 하면서 번호 인증을 Firebase를 통하여 적용하여 그때 공부한 내용을 적어봅니다. code및 공부 출처는 파이어베이스 입니다.(https://firebase.google.com/docs/auth/android/phone-auth?hl=ko#sign-in-the-user)

환경은 android, kotlin 입니다.

 

우선 기본적으로 firebase가 적용되어 있어야 합니다.

적용 방법은 app/build.gradle 에 다음을 추가합니다.

implementation 'com.google.firebase:firebase-auth:19.3.2'

그리고 FirebaseConsole에서 프로젝트를 firebase와 연결 합니다. (이 부분은 나중에 기회되면 다시 글 써보도록 하겠습니다.)

 

파이어 베이스에서는 에뮬레이터에서는 동작하지 않는다고 하는데, 에뮬레이터에서 실행했을 때 저는 성공을 받았습니다.

구현 방법을 알아보겠습니다.

파이어베이스 설정

우선 파이어베이스 콘솔에서 왼쪽의 개발 탭에서 AuthoAuthentication을 선택합니다.

그리고 Sign-in method를 선택 하고 

전화를 활성화 시킵니다. (전 이미 활성화를 시킨 상태라 다음과 같이 나타납니다.)

그리고 전화 탭을 선택 후 테스트용 번호와 인증코드를 등록합니다.

이때 테스트용 전화번호는 실제로 존재하지 않는 번호를 등록해야 한다고 파이어베이스에서 설명하고 있습니다. (그래서 저는 +82 11-2222-3333의 방식으로 등록하였습니다.) 그리고 개발용으로 사용되는 테스트 번호는 10개를 추가할 수 있습니다.

그리고 나서 코드를 작성합니다.

 

코드

        PhoneAuthProvider.getInstance().verifyPhoneNumber(
            requestPhoneNum,
            60,
            TimeUnit.SECONDS,
            activity,
            callbacks
        )

위의코드는 파이어베이스에 번호를 전달하여 파이어베이스가 사용자의 폰 번호를 확인하도록 합니다. 여기서 확인할 사항은 requestPhoneNum과 callbacks입니다.

 

우선 requestPhoneNum은 확인을 요청할 폰 번호인데 그 형식은 +821012345678의 형태입니다. (위에서 테스트 번호로 등록된 번호 중 1개가 들어가면됩니다.) 

callbacks는 다음과 같습니다.

       callbacks = object : PhoneAuthProvider.OnVerificationStateChangedCallbacks(){
            override fun onVerificationCompleted(p0: PhoneAuthCredential) {
            	// ...
            }

            override fun onVerificationFailed(p0: FirebaseException) {
            	// ...    
            }

            override fun onCodeSent(verificationId: String, token: PhoneAuthProvider.ForceResendingToken) {
              // ...
            }

        }

onVerificationCompleted 은 번호인증이 끝난 상태로 따로 인증번호를 입력할 필요없는 상태입니다.

onVerificationFailed은 번호인증이 실패한 상태 입니다.

onCodeSent은 번호는 확인 되었으나 인증코드를 입력해야 하는 상태입니다.

 

저는 에뮬레이터에서 테스트를 하였는데 onVerificationCompleted말고 onCodeSent로들어와서 인증번호 입력이 필요한 상태였습니다.

onCodeSent에서 받은 verificationId를 이용하여 PhoneAuthCredential를 만들었습니다. 만드는 방법은

PhoneAuthProvider.getCredential(verificationId, 인증코드)

위의 방식으로 만드는데 인증코드는 번호등록시 같이 등록했던 인증코드입니다. 그래서 디폴트로 박아두되고 edittext를 사용하여 입력받아서 적용하여두 됩니다.

 

이렇게 만들어진 PhoneAuthCredential를 다음과 같이 사용합니다.

Firebase.auth.signInWithCredential(phoneAuthCredential!!)
                .addOnCompleteListener(this) { task ->
                    if (task.isSuccessful) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInWithCredential:success")

                        val user = task.result?.user
                        // ...
                    } else {
                        // Sign in failed, display a message and update the UI
                        Log.w(TAG, "signInWithCredential:failure", task.exception)
                        if (task.exception is FirebaseAuthInvalidCredentialsException) {
                            // The verification code entered was invalid
                        }
                    }
                }

이렇게해서 task.isSuccessful 이 true 이면 번호 인증이 완료됩니다.

반응형