startActivityForResult() deprecated

호우·2022년 7월 19일
0

코틀린

목록 보기
1/8

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()
        }
    }
profile
뉴비 프로그래머

0개의 댓글