Flutter应用调用Google Calendar API遇400及登录错误求助
解决Flutter中Google登录与Calendar API访问问题
问题背景
- 最初使用
googleapis_auth包通过浏览器跳转登录Google账号,尝试访问Google Calendar API时收到400「无效请求」错误 - 切换至
google_sign_in包后,出现错误:PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null, null) - 已验证SHA-1证书指纹正确,怀疑OAuth同意屏幕未通过审核导致问题
排查与解决方案
1. 校验OAuth同意屏幕配置
- 测试用户添加:未通过审核的OAuth应用仅允许测试用户登录。在Google Cloud控制台的「OAuth同意屏幕」页面,将测试用Google账号添加至「测试用户」列表,避免普通用户无法登录的问题。
- 必填项完整性:检查同意屏幕的「应用名称」「支持邮箱」等必填字段是否填写完整,缺失必填项会导致凭据请求被拒绝,触发400错误。
- 权限范围匹配:确认同意屏幕中声明的权限范围包含Google Calendar API所需权限(如
https://www.googleapis.com/auth/calendar或https://www.googleapis.com/auth/calendar.readonly),范围不匹配会直接引发400无效请求。
2. 核对OAuth凭据细节
- 凭据类型正确:确保创建的是对应平台的OAuth客户端ID(Android平台选Android类型,iOS选iOS类型),混用凭据类型会导致ApiException 10。
- 状态启用:在Google Cloud控制台「凭据」页面,确认目标OAuth客户端ID处于启用状态,禁用的凭据会直接拒绝登录请求。
- 包名与SHA-1一致性:再次核对凭据配置的包名和SHA-1指纹,哪怕是大小写、空格差异都会导致验证失败。
3. 修复googleapis_auth的400错误
- 凭据参数正确:确认代码中使用的客户端ID/密钥与控制台创建的凭据完全一致,参数错误是400的常见原因。
- 回调URL匹配:
googleapis_auth跳转浏览器登录需要配置正确的回调URL,确保代码中的回调地址与凭据中注册的地址完全一致。
4. 其他排查动作
- 清除设备上应用的缓存和Google Play服务缓存,避免旧数据干扰。
- 确保设备的Google Play服务为最新版本,旧版本可能存在兼容性问题。
- 检查
google_sign_in包版本与当前Flutter版本的适配性,尝试升级或降级包版本排除兼容问题。
内容的提问来源于stack exchange,提问作者Rohit Rao
相关产品推荐
相关产品推荐

