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
相关产品推荐
相关产品推荐

