首页 > 解决方案 > 如何使用 Jetpack Compose 实现 GoogleSignIn?

问题描述

我正在尝试使用 jetpack compose 实现 GoogleSignIn。我可以启动 GoogleSignIn,但没有得到任何结果,也没有导航到下一个屏幕。我该怎么做?

这是我正在尝试的代码:

const val RC_SIGN_IN = 123

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {

            val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()
                .build()

            val mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

val result = remember { mutableStateOf<Client?>(null)}
            val launcher = rememberLauncherForActivityResult(
                ActivityResultContracts.StartActivityForResult()){

                if (it.resultCode == RC_SIGN_IN) {
                    val task = GoogleSignIn.getSignedInAccountFromIntent(it.data)
                    try {
                        val account: GoogleSignInAccount? =
                           task.getResult(ApiException::class.java)
                        val client = Client(
                            account?.id!!,
                            account.displayName!!,
                            account.photoUrl!!.toString(),
                            account.email!!
                        )
                        Log.d("TAG", client.toString())
                        viewModel.addClient(client)
                        result.value = client
                        navController.navigate(Screen.HomeScreen.route)
                    } catch (e: ApiException) {
                        Toast.makeText(this, "login failed", Toast.LENGTH_LONG).show()
                    }
                }
            }

       Button(onClick = {launcher.launch(mGoogleSignInClient.signInIntent)})

标签: androidkotlingoogle-signinandroid-jetpack

解决方案


你可以做这样的事情

@Preview
@Composable
fun GoogleSignInButton(){
    Column {
        val signInBtn = SignInButton(LocalContext.current)
        AndroidView(factory = {signInBtn})
    }
}

推荐阅读