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

Android中Firebase Google登录多次尝试后失效的问题求助

Firebase Google SignIn 认证故障排查

我在用Firebase的Google SignIn认证功能,一开始运行正常,但几次登录尝试后就失败了。想问问怎么在Debug模式下测试Google认证?我已经添加了AndroidDebug SHA密钥,但问题还是没解决。

出现的错误日志:

[BeginSignInOperation] BeginSignInOperation failed. [CONTEXT service_id=212 ]
    czxt: asco
        at asgj.apply(:com.google.android.gms@232316037@23.23.16 (150400-540660214):5)
        at cztd.d(:com.google.android.gms@232316037@23.23.16 (150400-540660214):2)
        at czte.run(:com.google.android.gms@232316037@23.23.16 (150400-540660214):10)
        at acav.c(:com.google.android.gms@232316037@23.23.16 (150400-540660214):6)
        at acav.run(:com.google.android.gms@232316037@23.23.16 (150400-540660214):7)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at acgd.run(:com.google.android.gms@232316037@23.23.16 (150400-540660214):0)
        at java.lang.Thread.run(Thread.java:923)
    Caused by: asco
        at ascn.a(:com.google.android.gms@232316037@23.23.16 (150400-540660214):0)
        at asco.d(:com.google.android.gms@232316037@23.23.16 (150400-540660214):0)
        at mnv.a(:com.google.android.gms@232316037@23.23.16 (150400-540660214):85)
        at asgh.a(:com.google.android.gms@232316037@23.23.16 (150400-540660214):0)
        at cztw.d(:com.google.android.gms@232316037@23.23.16 (150400-540660214):2)
        at czty.run(:com.google.android.gms@232316037@23.23.16 (150400-540660214):9)

使用的依赖:

  • Google Play服务认证:
com.google.android.gms:play-services-auth:20.5.0
  • Firebase认证:
com.google.firebase:firebase-auth-ktx:21.0.3

SignIn和SignUp请求对象的代码:

@Provides
@Named(SIGN_IN_REQUEST)
fun provideSignInRequest(
    app: Application
) = BeginSignInRequest.builder()
    .setGoogleIdTokenRequestOptions(
        BeginSignInRequest.GoogleIdTokenRequestOptions.builder()
            .setSupported(true)
            .setServerClientId(app.getString(R.string.default_web_client_id))
            .setFilterByAuthorizedAccounts(false)
            .build()
    )
    .setAutoSelectEnabled(false)
    .build()

@Provides
@Named(SIGN_UP_REQUEST)
fun provideSignUpRequest(
    app: Application
) = BeginSignInRequest.builder()
    .setGoogleIdTokenRequestOptions(
        BeginSignInRequest.GoogleIdTokenRequestOptions.builder()
            .setSupported(true)
            .setServerClientId(app.getString(R.string.default_web_client_id))
            .setFilterByAuthorizedAccounts(false)
            .build()
    )
    .build()

仓库中调用登录的代码:

override suspend fun oneTapSignInWithGoogle(): OneTapSignInResponse {
    return try {
        val signInResult = oneTapClient.beginSignIn(signInRequest).await()
        Response.Success(signInResult)
    } catch (e: Exception) {
        try {
            val signUpResult = oneTapClient.beginSignIn(signUpRequest).await()
            Response.Success(signUpResult)
        } catch (e: Exception) {
            Response.Failure(e)
        }
    }
}

排查方案

1. 验证Debug SHA-1密钥配置

重新生成并核对Debug SHA-1:在Android Studio右侧Gradle面板找到Tasks > android > signingReport,运行后复制Debug栏的SHA-1,到Firebase控制台对应项目的应用设置里粘贴,确保无多余字符,保存后等待5-10分钟让配置生效。

2. 检查Web客户端ID正确性

确认R.string.default_web_client_id对应的是Firebase控制台里的Web应用客户端ID(不是Android应用的),如果有误,替换strings.xml里的值。

3. 清理缓存与重装应用

清除应用缓存和数据,卸载后重装Debug版本;同时清除Google Play服务的缓存,避免旧会话干扰。

4. 增强Debug日志调试

修改仓库代码,捕获异常的具体信息,替代模糊的错误提示:

override suspend fun oneTapSignInWithGoogle(): OneTapSignInResponse {
    return try {
        val signInResult = oneTapClient.beginSignIn(signInRequest).await()
        Response.Success(signInResult)
    } catch (e: Exception) {
        Log.e("GoogleSignIn", "Sign in failed: ${e.message}", e)
        try {
            val signUpResult = oneTapClient.beginSignIn(signUpRequest).await()
            Response.Success(signUpResult)
        } catch (e: Exception) {
            Log.e("GoogleSignIn", "Sign up failed: ${e.message}", e)
            Response.Failure(e)
        }
    }
}

5. 统一依赖版本

你当前使用的play-services-auth和firebase-auth-ktx版本差距较大,建议升级到兼容的最新版本,比如:

com.google.android.gms:play-services-auth:20.7.0
com.google.firebase:firebase-auth-ktx:22.3.1

6. 优化OneTap认证逻辑

当前代码在signIn失败后直接尝试signUp,但两者请求配置几乎一致,可先单独测试signIn请求;另外,setFilterByAuthorizedAccounts(false)会显示所有Google账号,若改为true只显示已授权账号,可能解决异常。

内容的提问来源于stack exchange,提问作者iamkdblue

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:17:09