You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android Studio中Firebase Google登录认证失败问题求助

解决Firebase Google登录onActivityResult始终进入Catch块的问题

我之前也踩过这个一模一样的坑!咱们一步步来排查和解决这个问题:

一、先修正onActivityResult的逻辑错误

你当前的代码里,在try块里先判断task.isSuccessful()再调用getResult(),这个逻辑其实有问题——因为task.getResult(ApiException.class)本身就会在登录失败时主动抛出ApiException,不管你有没有提前判断task的状态。这也是为什么你总是进入catch块的核心原因之一。

把onActivityResult改成下面的写法,去掉多余的判断,同时打印错误码(错误码是排查问题的关键):

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    // 处理Google登录返回结果
    if (requestCode == RC_SIGN_IN) {
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        try {
            // 登录成功时直接获取账号信息,失败则自动抛出ApiException
            GoogleSignInAccount account = task.getResult(ApiException.class);
            Toast.makeText(getApplicationContext(),"正在获取Google用户信息",Toast.LENGTH_LONG).show();
            firebaseAuthWithGoogle(account.getIdToken());
        } catch (ApiException e) {
            // 打印错误码,这是排查问题的核心!
            Log.e("GoogleSignInDebug", "登录失败,错误码:" + e.getStatusCode());
            Toast.makeText(getApplicationContext(),"登录出错:" + e.getMessage(),Toast.LENGTH_LONG).show();
        }
    }
}

二、根据错误码排查配置问题

修正代码后,如果还是进入catch块,就根据打印的错误码对应下面的常见问题:

1. 错误码12500:Web Client ID配置错误

这是最常见的原因!你在createRequest()里用的getString(R.string.default_web_client_id)必须是Firebase控制台中Web应用的Client ID,不是Android应用的Client ID。

解决步骤:

  • 打开Firebase控制台 → 你的项目 → 项目设置 → 应用
  • 如果没有添加Web应用,点击「添加应用」→ 选择Web,完成创建
  • 复制Web应用下的「Web client ID」,粘贴到你的strings.xmldefault_web_client_id字段

2. 错误码10:SHA-1指纹未配置或配置错误

Firebase需要验证你的Android应用的SHA-1指纹,否则会拒绝登录请求。

解决步骤:

  • 获取Debug版本SHA-1:在终端运行keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android(Windows用户路径改为C:\Users\你的用户名\.android\debug.keystore
  • 获取Release版本SHA-1:用你打包用的keystore,运行类似命令keytool -list -v -keystore 你的keystore路径 -alias 你的别名
  • 回到Firebase控制台 → 项目设置 → 你的Android应用 → 添加对应的SHA-1指纹

3. 依赖版本不匹配

确保你的build.gradle(Module级别)中,Google Play Services和Firebase依赖的版本一致,最好使用最新稳定版:

// 示例依赖版本,根据实际情况更新
implementation 'com.google.android.gms:play-services-auth:20.7.0'
implementation 'com.google.firebase:firebase-auth:22.3.1'

4. 缺少Internet权限

检查AndroidManifest.xml中是否添加了Internet权限:

<uses-permission android:name="android.permission.INTERNET" />

三、额外排查点

  • 确保你的设备/模拟器上的Google Play Services是最新版本,旧版本可能导致登录失败
  • 优先使用真实设备测试(部分模拟器存在Google服务兼容性问题)

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

火山引擎 最新活动