Kotlin Jetpack Compose集成Firebase谷歌登录遇NoCredentialException问题求助
Kotlin Jetpack Compose集成Firebase谷歌登录遇NoCredentialException问题求助
兄弟,我太懂你遇到这个问题的崩溃感了!之前在Jetpack Compose里折腾Firebase谷歌登录时,也踩过几乎一模一样的坑,来帮你梳理下可能的原因和解决办法,应该能帮你搞定这个“No Credentials available”的问题。
首先,先排查几个最容易翻车的基础配置:
- 检查Firebase配置与SHA指纹:确保你的
google-services.json已经正确放在app模块的根目录里,而且Firebase控制台中,你的应用对应的SHA-1和SHA-256指纹都配置完整了!很多时候就是漏加指纹,导致谷歌服务无法识别你的应用,自然拉不出账号列表。 - 确认测试设备的谷歌账号:如果你的测试机/模拟器里根本没登录任何谷歌账号,那肯定会报这个错,先去系统设置里添加一个谷歌账号试试。
接下来,看看你的登录逻辑是不是有问题——你贴的代码只到初始化Context,大概率是登录流程的实现环节出了问题。给你一个完整的Jetpack Compose下的谷歌登录示例,你可以对照着调整:
@Composable fun GoogleSignInButton() { val context = LocalContext.current val auth = Firebase.auth // 配置谷歌登录选项,指定需要的权限 val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(context.getString(R.string.default_web_client_id)) // 这个ID来自google-services.json .requestEmail() .build() val googleSignInClient = GoogleSignIn.getClient(context, gso) // 处理登录结果的Launcher val signInLauncher = rememberLauncherForActivityResult( contract = ActivityResultContracts.StartActivityForResult() ) { result -> if (result.resultCode == Activity.RESULT_OK) { val task = GoogleSignIn.getSignedInAccountFromIntent(result.data) try { // 获取谷歌账号凭证 val account = task.getResult(ApiException::class.java) val credential = GoogleAuthProvider.getCredential(account.idToken, null) // 用Firebase验证凭证 auth.signInWithCredential(credential) .addOnCompleteListener { firebaseTask -> if (firebaseTask.isSuccessful) { // 登录成功,弹出Toast Toast.makeText(context, "登录成功!", Toast.LENGTH_SHORT).show() } else { Toast.makeText(context, "登录失败:${firebaseTask.exception?.message}", Toast.LENGTH_SHORT).show() } } } catch (e: ApiException) { Toast.makeText(context, "获取账号凭证失败:${e.message}", Toast.LENGTH_SHORT).show() } } } Button( onClick = { // 启动谷歌登录界面 val signInIntent = googleSignInClient.signInIntent signInLauncher.launch(signInIntent) }, modifier = Modifier.padding(16.dp) ) { Text("谷歌登录") } }
另外还要确认你的依赖是否齐全,在app级别的build.gradle.kts(或.gradle)里要加上这些:
// Firebase Auth implementation("com.google.firebase:firebase-auth-ktx:22.3.1") // 谷歌登录服务 implementation("com.google.android.gms:play-services-auth:20.7.0")
最后,如果还是不行,去Logcat里搜更详细的错误日志,比如有没有提示“无匹配的客户端ID”或者“签名验证失败”之类的信息,这些能帮你精准定位问题。
备注:内容来源于stack exchange,提问作者Ajay Satpati
相关产品推荐
相关产品推荐

