ANDROID/Android 개발 이슈 & 해결
[Android] Activity Result API를 이용한 Google 로그인
주 녕
2021. 8. 18. 20:56
반응형
인스타그램 클론을 하면서 해당 이슈가 발생했고 내가 하고 있던 작업은 Google 로그인을 연결하는 부분이었습니다.
Firebase의 공식 문서에서도 아직 startActivityForResult()를 사용하고 있는 것을 확인할 수 있습니다!
그래서 같은 이슈가 발생한 다른 분들을 위해 해결한 코드를 남깁니다! 혹시 더 좋은 코드가 있다면 알려주세요! 🧐🧐
이전 포스팅에서도 작성했지만, startActivityForResult()는 deprecated된 상태입니다ㅠㅠ
아래와 같이 코드를 작성했습니다.
변수는 클래스 내에 선언을 해두고 onCreate()에서 Activity Result API를 사용한 모습입니다!
자세한 코드 설명은 위의 포스팅을 참고해주세요!
class LoginActivity : AppCompatActivity() {
...
private lateinit var activityLauncher: ActivityResultLauncher<Intent>
override fun onCreate(savedInstanceState: Bundle?) {
...
/* Google 로그인 */
var gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build()
googleSignInClient = GoogleSignIn.getClient(this, gso)
activityLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
result: ActivityResult ->
if (result.resultCode == RESULT_OK) {
var task = GoogleSignIn.getSignedInAccountFromIntent(result.data)
try {
var account = task.getResult(ApiException::class.java)!!
firebaseAuthWithGoogle(account.idToken!!)
Log.d("GoogleLogin", "firebaseAuthWithGoogle: " + account.id)
} catch (e: ApiException) {
Log.d("GoogleLogin", "Google sign in failed: " + e.message)
}
}
}
binding.googleLoginButton.setOnClickListener {
activityLauncher.launch(googleSignInClient!!.signInIntent)
}
}
아래 화면과 같이 잘 작동하는 것을 확인할 수 있습니다!
지금은 이미 한번 로그인을 했었다가 로그아웃 한 상태라 설정해둔 계정으로 들어갔기 때문에 해당 계정으로 자동 로그인이 된 화면입니다! 처음 로그인을 시도했다면 구글 계정을 선택하고 인증하는 절차가 나옵니다!
참고하고 있는 강의
reference >
- https://firebase.google.com/docs/auth/android/google-signin?hl=ko
반응형