iOS应用接入Google登录返回400 invalid_request错误如何解决?
问题原因
400 Invalid_request You can't sign in to this app because it doesn't comply with Google's OAuth 2.0 policy for keeping apps secure
该报错核心原因分为配置参数错误和后台配置不完整两类,具体如下:
- 核心参数填错:你在初始化
GIDConfiguration时错误使用了com.googleusercontent.apps开头的反向客户端ID,该ID仅用于配置Xcode的URL Schemes,不是接口需要传入的clientID参数。 - OAuth同意屏幕配置异常:要么同意屏幕必填字段缺失,要么应用处于测试模式但测试账号未加入白名单,要么应用未切换到生产模式导致非白名单账号无法访问。
- Bundle ID不匹配:Google Cloud后台绑定的iOS应用Bundle ID和当前项目的Bundle ID不一致。
- 回调逻辑冲突:AppDelegate的openURL方法中同时调用了其他第三方SDK(如Facebook)的回调处理逻辑,可能抢占了Google登录的回调响应。
解决方法
- 修正ID配置:
去Google Cloud后台Credentials页找到你创建的iOS OAuth 2.0客户端,复制原始clientID(格式为xxx.apps.googleusercontent.com),替换ViewController中GIDConfiguration.init(clientID: "")的参数值;将com.googleusercontent.apps开头的反向ID填入Xcode项目 -> Info选项卡 -> URL Types -> URL Schemes字段中。 - 完善OAuth同意屏幕:
进入Google Cloud后台OAuth同意屏幕页面,补全所有必填字段:应用名称、用户支持邮箱、开发者联系邮箱;若应用还在测试阶段,将你用于测试的Google账号添加到「测试用户」列表;若需面向所有用户开放,点击「发布应用」将同意屏幕切换为生产状态。 - 核对Bundle ID:
确保Google Cloud后台iOS客户端绑定的Bundle ID,和Xcode项目中General选项卡下的Bundle ID完全一致,大小写也要匹配。 - 优化回调逻辑:
如果你的项目没有集成Facebook登录,删除AppDelegate的openURL方法中ApplicationDelegate.shared.application相关的Facebook回调代码,避免和Google登录的回调产生冲突。
内容的提问来源于stack exchange,提问作者NoName555
相关产品推荐
相关产品推荐

