无需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包实现,确保以下配置正确:
- 添加依赖:在
pubspec.yaml中引入最新版本的google_sign_in - 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客户端的配置一致)
- 在
- iOS端配置:
- 在
ios/Runner/Info.plist中添加URL Scheme,格式为com.googleusercontent.apps.你的OAuth客户端ID
- 在
- 核心登录代码:
重点:必须在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
相关产品推荐
相关产品推荐

