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

Flutter Google登录选择账号后无报错无限卡住如何解决?

调试方法
  • 新增GoogleSignIn状态监听:初始化GoogleSignIn后添加状态回调,打印底层返回的用户数据与异常,避免await静默丢失响应:
    _googleSignIn.onCurrentUserChanged.listen((account) {
      print("当前登录账号:$account");
    }, onError: (e) {
      print("登录回调异常:$e");
    });
    
  • 抓取原生层日志:Flutter层未捕获异常大概率是原生层报错未向上抛出,安卓端连接设备后执行命令adb logcat -s GoogleSignIn,Flutter,筛选谷歌登录相关的原生报错信息
  • 最小scope测试:先把GoogleSignIn初始化的scopes改为仅['email'],排除敏感权限校验导致的卡住问题
可行解决方案
  1. 校验OAuth同意屏幕配置
    登陆Google Cloud控制台,找到对应Firebase项目的OAuth同意屏幕:
    • 如果应用处于测试状态,必须将你用来测试的谷歌账号添加到「测试用户」列表中,未在列表内的账号选完后会直接卡住无报错
    • 确认必填项(应用名称、开发者联系方式)已完整填写,缺项会导致谷歌权限校验不通过
  2. 修正密钥与配置文件匹配问题
    • 确认当前打包用的签名密钥SHA1、SHA256已全部添加到Firebase对应应用的配置中,debug模式用的是debug.keystore的签名,release模式用的是正式签名,二者SHA值不同,需要分别添加
    • 重新从Firebase控制台下载最新的google-services.json,放到安卓项目android/app/目录下,确认文件内的包名、client_id和你的项目配置完全匹配
  3. 适配google_sign_in 5.1.0版本的已知问题
    该版本存在登录缓存导致的await卡住问题,可在调用signIn前先强制清除缓存,修改代码如下:
    try {
      // 新增这行,先清之前的登录缓存
      await _googleSignIn.signOut();
      GoogleSignInAccount? googleSignInAccount = await _googleSignIn.signIn();
      // 原有后续代码保持不变
    }
    
  4. 检查安卓端构建配置
    • 确认项目级android/build.gradle中已添加谷歌服务依赖,推荐适配Flutter 2.2.1的版本为4.3.8:
      dependencies {
          classpath 'com.android.tools.build:gradle:4.1.0'
          classpath 'com.google.gms:google-services:4.3.8'
      }
      
    • 确认应用级android/app/build.gradle底部已添加谷歌服务插件引用:
      apply plugin: 'com.google.gms.google-services'
      
  5. 敏感权限适配
    你使用的https://www.googleapis.com/auth/contacts.readonly属于谷歌敏感权限,需要在OAuth同意屏幕提交权限申请并通过谷歌审核后才能正式使用,测试阶段建议先移除该scope,验证基础登录流程正常后再单独处理权限申请问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:27:02