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

Flutter Android端Firebase Google登录失败(ApiException:10)求助

Flutter Android端Firebase Google登录报错ApiException:10的解决方案

问题描述

Android端调用Google登录时触发以下异常:

Exception has occurred.
PlatformException (PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null, null))

iOS端登录功能正常,已完成以下操作:

  • 通过./gradlew signedReport获取SHA1和SHA256密钥并配置到Firebase后台
  • 下载并替换项目中的google-services.json文件
  • 更新AndroidManifest.xml添加相关meta-data
  • 配置了根目录、settings.gradle及APP目录的build.gradle文件
  • 实现了Google登录代码

排查与解决步骤

1. 验证SHA密钥配置

  • 确保debug和release环境的SHA1、SHA256密钥都已添加到Firebase项目的Android应用配置中,不要遗漏任一环境。
  • 核对Firebase后台Android应用的applicationId与APP目录build.gradle中的applicationId完全一致,包括大小写。
  • 修改SHA密钥后,必须重新下载最新的google-services.json替换旧文件,执行flutter clean后重新构建项目。

2. 检查ClientId配置

  • 代码中硬编码的clientId需使用Firebase后台的Web类型OAuth 2.0客户端ID,而非Android客户端ID。可在Firebase控制台「项目设置」→「常规」→「OAuth 2.0客户端ID」中找到该ID。
  • 建议移除硬编码的clientId,让GoogleSignIn自动读取google-services.json中的配置,避免手动配置错误。

3. 调整Gradle插件顺序与版本

  • 插件顺序修正:APP目录build.gradle中com.google.gms.google-services插件需放在最后应用,正确顺序如下:
    plugins {
        id "com.android.application"
        id "kotlin-android"
        id "dev.flutter.flutter-gradle-plugin"
        id 'com.google.gms.google-services' // 放在最后
    }
    
  • 版本升级:将根目录build.gradle中的google-services插件版本升级至最新稳定版(如4.4.1),Firebase BOM版本升级至最新稳定版(如33.5.0),避免依赖兼容问题。

4. 确认签名配置

  • 若使用debug模式测试,可手动指定debug签名配置,确保使用的keystore与生成SHA密钥的一致:
    android {
        // ... 其他配置
        signingConfigs {
            debug {
                storeFile file('~/.android/debug.keystore') // 根据实际路径调整
                storePassword 'android'
                keyAlias 'androiddebugkey'
                keyPassword 'android'
            }
        }
        // ... 其他配置
    }
    
  • 若测试release版本,需确认release签名配置正确,且对应的SHA密钥已添加到Firebase后台。

5. 优化登录代码

移除硬编码clientId并添加异常捕获,便于排查问题:

Future<UserCredential> signInWithGoogle() async {
  print("Initiating");
  final GoogleSignIn _googleSignIn = GoogleSignIn();
  print("Went through");
  try {
    final googleUser = await _googleSignIn.signIn();
    if (googleUser == null) {
      throw Exception("用户取消登录");
    }
    final GoogleSignInAuthentication? googleAuth = await googleUser.authentication;
    final credential = GoogleAuthProvider.credential(
      accessToken: googleAuth?.accessToken,
      idToken: googleAuth?.idToken,
    );
    return await FirebaseAuth.instance.signInWithCredential(credential);
  } catch (e) {
    print("Google登录错误: $e");
    rethrow;
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 10:45:55