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

Flutter集成google_sign_in遇ApiException:10错误求助

Flutter Google Calendar 登录报错 ApiException: 10 排查方案

问题场景

我开发的Flutter应用需对接谷歌日历同步跨设备日程,使用的敏感权限范围:

static const List<String> scopes = ['https://www.googleapis.com/auth/calendar', 'https://www.googleapis.com/auth/calendar.events'];

尝试googleapis_auth失败后,改用extension_google_sign_in_as_googleapis_auth结合google_sign_in实现登录,但选择账号后触发错误com.google.android.gms.common.api.ApiException: 10。

已完成的配置:

  • 证书:获取Play Store签名/上传证书哈希、本地debug证书哈希(通过gradlew signingReport)
  • Firebase:上传各证书SHA1/SHA256、更新google-services.json、设置支持邮箱、执行flutter clean
  • Google Cloud:为3种证书创建独立Android OAuth凭据,使用debug ClientID配置代码,设置测试模式授权同意界面并添加测试邮箱
  • 调用_googleSignIn.signIn()触发报错,完整堆栈:
I/flutter ( 6057): PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null, null)
I/flutter ( 6057): #0      GoogleSignInApi.signIn (package:google_sign_in_android/src/messages.g.dart:221:7)
I/flutter ( 6057): <asynchronous suspension>
I/flutter ( 6057): #1      GoogleSignIn._callMethod (package:google_sign_in/google_sign_in.dart:278:30)
I/flutter ( 6057): <asynchronous suspension>
I/flutter ( 6057): #2      GoogleSignIn.signIn.isCanceled (package:google_sign_in/google_sign_in.dart:431:5)
I/flutter ( 6057): <asynchronous suspension>

排查步骤

1. 核对证书哈希与OAuth凭据匹配度

  • 确认gradlew signingReport输出的debug证书SHA1为大写+冒号分隔格式(如AA:BB:CC...),复制时不要遗漏冒号或转成小写
  • 检查Google Cloud中创建的Android OAuth凭据,对应的SHA1必须与本地debug证书完全一致,字符错误会直接触发10号错误
  • 若使用Play App Signing,需确认上传证书的SHA1已添加到对应OAuth凭据中(测试发布版本时需注意)

2. 验证OAuth ClientID配置

  • 确保代码中使用的debug ClientID是Google Cloud中对应debug证书生成的,而非发布版或其他证书的ClientID
  • 核对google-services.json中client->oauth_client->client_id与代码配置的一致性,不一致则重新下载最新文件替换到android/app目录,替换后必须执行flutter clean再编译

3. 检查授权同意界面配置

  • 测试模式下的授权同意界面需点击发布才会生效,仅保存不发布无法正常使用
  • 确认添加的测试邮箱与登录用谷歌账号完全匹配,无拼写错误
  • 把calendar和calendar.events权限添加到同意界面的"授权范围"列表,保存后发布

4. 检查Google Sign-In初始化代码

  • 确保初始化时正确传入scopes和ClientID,示例:
final GoogleSignIn _googleSignIn = GoogleSignIn(
  scopes: [
    'https://www.googleapis.com/auth/calendar',
    'https://www.googleapis.com/auth/calendar.events',
  ],
  clientId: '你的debug ClientID',
);
  • 未指定clientId时,插件会自动读取google-services.json,但手动指定可避免读取错误

5. 清除缓存后重试

  • 测试设备上清除应用数据和缓存
  • 清除Google Play服务缓存(设置->应用->Google Play服务->存储->清除缓存)
  • 退出设备谷歌账号,重新登录后再测试

6. 确认Calendar API已启用

  • 进入Google Cloud控制台搜索"Calendar API",确认该API已启用,未启用则点击启用,等待数分钟后重试

7. 排查依赖版本兼容性

  • 检查pubspec.yaml中相关依赖版本,建议使用最新稳定版,示例:
google_sign_in: ^6.2.1
extension_google_sign_in_as_googleapis_auth: ^2.0.1
googleapis: ^12.0.0
  • 更新依赖后执行flutter pub get和flutter clean,重新编译项目

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:33:29