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

无需Firebase,仅用Google Cloud获取google-services.json解决Flutter谷歌登录idToken为空问题

Flutter谷歌登录idToken为null问题及google-services.json获取方法

关键澄清:纯Google Cloud谷歌登录无需google-services.json

google-services.json是Firebase SDK的专属配置文件,如果你完全不使用Firebase服务,仅通过Google Cloud实现谷歌登录,这个文件不是必需的。你遇到的idToken返回null问题,大概率是Flutter端的登录配置遗漏(比如scope未正确设置),而非缺少该文件。

若确实需要获取google-services.json(如依赖Firebase相关库)

按以下步骤从Google Cloud控制台获取:

  • 登录你的Google Cloud项目控制台
  • 左侧导航栏选择「APIs和服务」→「凭据」
  • 点击页面顶部「创建凭据」→选择「OAuth客户端ID」
  • 若未配置OAuth同意屏幕,先完成配置:填写应用名称、支持邮箱,添加测试用户(仅限测试阶段)
  • 选择客户端ID类型:Android或iOS,填写对应平台的包名/Bundle ID,Android需额外提供SHA-1指纹
  • 创建完成后,在凭据列表找到刚生成的客户端条目,点击右侧下载按钮,即可获取google-services.json(Android)或GoogleService-Info.plist(iOS)

纯Google Cloud实现Flutter谷歌登录的正确配置(解决idToken为null)

使用官方google_sign_in包实现,确保以下配置正确:

  1. 添加依赖:在pubspec.yaml中引入最新版本的google_sign_in
  2. Android端配置:
    • 在android/app/src/main/AndroidManifest.xml的<application>标签内添加:
      <meta-data
          android:name="com.google.android.gms.version"
          android:value="@integer/google_play_services_version" />
      
    • 确保android/app/build.gradle中配置了正确的应用ID和SHA-1指纹(需与Google Cloud控制台中OAuth客户端的配置一致)
  3. iOS端配置:
    • 在ios/Runner/Info.plist中添加URL Scheme,格式为com.googleusercontent.apps.你的OAuth客户端ID
  4. 核心登录代码:
    import 'package:google_sign_in/google_sign_in.dart';
    
    final GoogleSignIn _googleSignIn = GoogleSignIn(
      scopes: [
        'email',
        'openid',
        'profile',
      ],
      clientId: '你的Google Cloud OAuth客户端ID', // iOS必须填写,Android可省略
    );
    
    Future<void> signInWithGoogle() async {
      try {
        final GoogleSignInAccount? googleUser = await _googleSignIn.signIn();
        if (googleUser == null) return;
        final GoogleSignInAuthentication googleAuth = await googleUser.authentication;
        // 此时应能正常获取idToken
        print('idToken: ${googleAuth.idToken}');
        print('accessToken: ${googleAuth.accessToken}');
        // 后续处理登录逻辑
      } catch (e) {
        print('登录失败:$e');
      }
    }
    
    重点:必须在scopes中包含openid,这是获取idToken的必要前提——很多人忽略这一点导致idToken为null,你之前React项目成功可能是默认包含了该scope,但Flutter的google_sign_in需要显式声明。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:05:43