부트캠프 최종 팀 프로젝트 기록 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
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 코드는 바꿀 필요가 없었다.
처음 보는 개념이었는데 어느 정도 이해가 가능했던 건 이 포스팅 덕분이다.
포스팅은 이 블로그의 글 기반으로 작성했다.
'⛏️ | 개발 기록 > 🪐 | Cosmic Detox' 카테고리의 다른 글
[Android] ConstraintLayout GuildLine으로 화면 구성하기 (0) | 2024.09.23 |
---|---|
[Android] SplashScreen Api를 이용해 로그인 여부 확인 (0) | 2024.09.17 |
[Android] Kakao Login을 Firebase Authentication과 연결 (0) | 2024.09.12 |
[Node.js] Intellij, Vscode에서 Firebase Functions 개발을 위한 Node.js 프로젝트 세팅 (1) | 2024.09.11 |
[Android] 앱 서비스 출시를 위한 개인정보처리방침 및 이용약관 작성하기 (0) | 2024.09.09 |