You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 17:43:19