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

