본문 바로가기
⛏️ | 개발 기록/🪐 | Cosmic Detox

[Android] Firebase Google One-Tap login으로 마이그레이션

by immgga 2024. 9. 13.

출처: unsplash.com

 

부트캠프 최종 팀 프로젝트 기록 10

 

 

서론

이번에 코드 수정 사항을 스캔하다가 눈에 보이는 것을 발견했다.

바로 GoogleSignIn, GoogleSignInClient가 deprecated 되어 있는 것을 발견했다.

 

이와 관련해서 자료를 찾아보다가 Google에 새로 출시한 one-tap sign in이라는 것을 발견했다.

이 로그인 방법은 기존의 방법에 비해 다양한 장점을 가진다.

  • 한 번의 클릭으로 로그인이 가능하다.
  • 새 사용자는 앱 안에서 쉽게 계정을 만들 수 있다.
  • 기존의 비밀번호에 의존하는 방식의 로그인이 아니기 때문에 관련 보안 위협을 줄일 수 있다.
  • 개발하는 입장에서도 기존의 방식보다 코드가 간소화되어서 편리해진다.

위와 같은 장점이 있는데 안 쓸 이유가 없지 않은가?

바로 사용해 보자.

 

 

Google One-Tap login 구현

구글 원 탭 로그인을 구현하기 위해서는 새로운 라이브러리를 추가해야 한다.

implementation("androidx.credentials:credentials-play-services-auth:1.3.0-rc01")
implementation("com.google.android.libraries.identity.googleid:googleid:1.1.1")

이 중 첫 번째 dependency는 선택 사항이다.

위 dependency는 Android 13(Api 33) 이하의 기기에서 사용자 인증 정보에 대한 access를 제공한다.

더 원활하고 안전한 로그인 방법을 지원하는 라이브러리인 듯하다.

자세한 정보는 아래의 링크를 참고하자.

 

https://developer.android.com/jetpack/androidx/releases/credentials?hl=ko

 

사용자 인증 정보  |  Jetpack  |  Android Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 사용자 인증 정보 이 라이브러리는 사용자 인증 정보

developer.android.com

 

 

Kotlin으로 구현

이제 본격적으로 구현을 진행해 보겠다.

우선 credentialManager를 정의한다.

val credentialManager = CredentialManager.create(context)

 

그리고 id option을 만들어서 request를 만들어 준다.

val googleIdOption = GetGoogleIdOption.Builder()
    .setFilterByAuthorizedAccounts(false)
    .setServerClientId(context.getString(R.string.default_web_client_id))
    .build()
val credentialRequest = GetCredentialRequest.Builder()
    .addCredentialOption(googleIdOption)
    .build()

 

credentialRequest를 이용해 구글 로그인 인증 요청을 보낼 것이다.

val googleSignInRequest = credentialManager.getCredential(
    request = credentialRequest,
    context = context
)
val credential = googleSignInRequest.credential
if (credential is CustomCredential && credential.type == GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL) {
    val googleIdTokenCredential = GoogleIdTokenCredential.createFrom(credential.data)
    googleSignInWithFirebaseAuth(googleIdTokenCredential.idToken, onSuccess, onFailure)
}

 

여기서 credentialManager.getCredential이 비동기 함수이기 때문에 coroutineScope 안에서 작동해야 한다.

credential이 CustomCredential이고, type이 TYPE_GOOGLE_ID_TOKEN_CREDENTIAL인 경우에 response를 받을 수 있도록 해주었다.

firebase authentication에 인증하기 위한 idToken을 googleIdTokenCredential.idToken으로 받아올 수 있다.

firebase authentication 인증은 기존의 방법과 동일하게 진행하면 된다.

 

firebase 인증 코드이다.

val authCredential = GoogleAuthProvider.getCredential(idToken, null)
auth.signInWithCredential(authCredential).addOnCompleteListener { task ->
    if (task.isSuccessful) {
        initUserData(onSuccess, onFailure)
    } else {
        onFailure(task.exception!!)
    }
}

 

 

정리

기존의 방식보다 확실히 코드가 간결해졌다.

기존에는 registerActivityForResult를 사용해서 로그인을 받았어야 했는데 그럴 필요가 없어졌다.

기존 firebase 인증 코드와도 호환이 된다는 점이 장점이었던 것 같다. firebase 코드는 바꿀 필요가 없었다.

 

처음 보는 개념이었는데 어느 정도 이해가 가능했던 건 이 포스팅 덕분이다.

포스팅은 이 블로그의 글 기반으로 작성했다.

Google-One Tap Login 인증관리자로 마이그레이션 하기

 

Google-One Tap Login 인증관리자로 마이그레이션 하기

기존 안드로이드에서 구글 로그인시에는 One Tap Login을 사용하여 구현하였다.어느날 보니 갑자기 다음과 같은 메시지가 노출되고있었다.주의: Android용 원탭 지원이 곧 중단됩니다. 앱의 보안 및

velog.io

728x90