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

Flutter Firebase Google登录出现BAD_TOKEN_REQUEST错误求助

解决Flutter Firebase Google登录的BAD_TOKEN_REQUEST错误

排查方向及解决方案

1. 清除应用残留数据

  • 卸载测试设备/模拟器上的应用,彻底清除旧令牌缓存
  • 重启设备后重新安装运行应用

2. 更新依赖插件版本

  • 检查pubspec.yaml中google_sign_in和firebase_auth的版本,升级至最新稳定版:
    google_sign_in: ^6.2.1
    firebase_auth: ^4.16.0
    
  • 执行flutter pub get同步依赖

3. 校验OAuth客户端ID配置

  • 打开Firebase控制台项目设置→常规→应用,确认google-services.json里的oauth_client字段对应的客户端ID,已在Google Cloud Console的API和服务→凭据中存在,且SHA-1指纹与Firebase配置完全一致
  • 若存在多个客户端ID,确保Android应用对应的ID未被误删或修改

4. 修正登录代码逻辑

当前代码存在空安全风险和状态设置时机错误,调整如下:

void signInWithGoogle() async {
  setState(() {
    isLoading = true;
  });
  
  try {
    GoogleSignInAccount? googleUser = await GoogleSignIn().signIn();
    if (googleUser == null) {
      // 处理用户取消登录的情况
      setState(() {
        isLoading = false;
      });
      return;
    }

    GoogleSignInAuthentication googleAuth = await googleUser.authentication;

    AuthCredential credential = GoogleAuthProvider.credential(
      accessToken: googleAuth.accessToken,
      idToken: googleAuth.idToken,
    );

    await FirebaseAuth.instance.signInWithCredential(credential);
  } catch (e) {
    // 捕获异常并处理,比如弹窗提示用户登录失败
    print('登录错误:$e');
  } finally {
    setState(() {
      isLoading = false;
    });
  }
}
  • 将加载状态设置移至方法开头,避免用户操作后无反馈
  • 添加try-catch捕获异常,防止应用崩溃
  • 处理googleUser为null的场景(用户主动取消登录)

5. 检查Google Play服务版本

  • 确保测试设备/模拟器上的Google Play服务为最新版本,旧版本可能导致令牌验证失败

6. 重新构建应用

  • 重新下载Firebase控制台的google-services.json,替换android/app目录下的旧文件
  • 执行flutter clean清理构建缓存后,重新运行应用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:40:05