startActivityForResult()가 deprecated돼서 다른 것을 찾아보다가 알아낸 게 registerForActivityResult()였다.
구글 로그인 버튼을 누르면 loginLaucher를 launch해서 로그인을 진행.
그 후에 registerForActivityResult를 세팅해서 구동할 수 있게 작성해야 한다.
binding.buttonGoogleLogin.setOnClickListener {
//CoroutineScope(Dispatchers.IO).launch {
val signIntent: Intent = googleSignIn.signInIntent
loginLauncher.launch(signIntent)
//}
}
아래는 구글 로그인을 인증해서 토큰 확인하고 소셜로그인 하는 부분
private val loginLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){ result ->
Log.e(TAG, "loginLauncher - result: $result")
if(result.resultCode == RESULT_OK){
val task = GoogleSignIn.getSignedInAccountFromIntent(result.data)
try{
task.getResult(ApiException::class.java)?.let { account ->
Log.e(TAG, "loginLauncher - firebaseAuthWithGoogle: ${account.id}")
tokenId = account.idToken
firebaseAuthWithGoogle(tokenId)
//viewModel.saveToken(tokenId ?: throw java.lang.Exception())
val googleSignInToken = account.idToken ?: ""
if(googleSignInToken != ""){
Log.e(TAG, "googleSignInToken: $googleSignInToken")
} else{
Log.e(TAG, "googleSignInToken is null")
}
} ?: throw Exception()
} catch(e: Exception){
e.printStackTrace()
handleErrorState()
}
} else{
handleErrorState()
}
}