android - 如何使用 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)})
解决方案
你可以做这样的事情
@Preview
@Composable
fun GoogleSignInButton(){
Column {
val signInBtn = SignInButton(LocalContext.current)
AndroidView(factory = {signInBtn})
}
}
推荐阅读
- matlab - 补零前后图像的自相关函数
- c - 我如何使用 sscanf 获取带有 / 分隔符的 int
- smtp - 从 GitHub 重新下载后 PHPMailer 6.0.5 无法正常工作 - 语法错误
- javascript - jQuery:tablesorter 无法处理使用 jquery load() 加载的表
- unity3d - Unity 2D 反射/弹跳
- python - 在列表推导中处理 lambda 表达式中的元组
- c# - 如何在 Frames/IFrames 中获取 HtmlElement 值?
- azure - Azure 中的 Powershell 脚本
- plugins - 您可以在 Adobe XD 插件中使用 ES2015+ 功能 (ES6) 吗?
- javascript - 使用 onsubmit 验证表单后显示模式