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.xml中default_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




