Flutter应用集成Google登录遇ApiException:10错误及客户端ID选择咨询
一、排查ApiException:10错误
这个错误几乎都是签名配置或客户端ID不匹配导致的,即使你已经配置了SHA-1,也可能存在以下遗漏:
确认Debug/Release SHA-1都已配置
开发时Flutter默认使用debug keystore,很多人只配置了release的SHA-1,导致debug模式报错。可以通过以下命令获取debug SHA-1:# Mac/Linux keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android # Windows keytool -list -v -keystore C:\Users\<你的用户名>\.android\debug.keystore -alias androiddebugkey -storepass android -keypass android把这个SHA-1添加到Firebase项目的Android应用配置,以及GCP OAuth 2.0客户端ID的Android应用设置里。
重新下载google-services.json
每次修改SHA-1或客户端ID后,都需要从Firebase控制台重新下载google-services.json,替换android/app目录下的旧文件——旧文件不会自动同步新配置信息。验证包名一致性
检查GCP OAuth里Android客户端ID的包名,和你Flutter项目android/app/build.gradle中的applicationId完全一致,大小写、符号都不能出错。清理项目缓存
执行以下命令清理缓存后重新运行项目,避免旧配置残留:flutter clean flutter pub get flutter run检查Google服务依赖配置
确认android/build.gradle中已添加Google服务依赖:buildscript { dependencies { // 可使用最新稳定版 classpath 'com.google.gms:google-services:4.3.15' } }同时android/app/build.gradle末尾要添加:
apply plugin: 'com.google.gms.google-services'
二、客户端ID选择指南
你提到有4个客户端ID,只需根据平台类型精准选择即可:
- 优先选Android类型的客户端ID:这是专门给Flutter Android端用的,在GCP OAuth控制台里会标注类型为「Android」,关联了你配置的SHA-1和app包名。Firebase控制台的「项目设置」->「应用」->你的Android应用详情里,也能看到这个客户端ID,两者是一一对应的。
- Web类型客户端ID:这是给你的Django Web端用的,Flutter Android端不需要使用。
- iOS/Desktop类型客户端ID:如果你的Flutter app暂时只做Android,这些可以忽略,后续扩展平台时再对应使用。
另外要注意:Firebase会自动帮你关联GCP的客户端ID,只要你在Firebase里正确配置了Android应用并下载了google-services.json,Flutter的google_sign_in插件会自动读取正确的客户端ID,不需要手动指定(除非你有特殊多客户端需求)。
内容的提问来源于stack exchange,提问作者Eungmin Kim

