onActivityResult始终返回未授权,Google Drive API登录失败原因咨询
排查Google Drive API授权失败进入else分支的常见原因
我来帮你梳理下几个大概率导致这个问题的原因,都是我在处理同类问题时碰到过的典型情况:
OAuth客户端配置不匹配
先去Google Cloud Console核对这两个关键信息:- 应用的包名必须和你在控制台里填写的完全一致,大小写都不能错;
- 签名指纹要对应你当前测试用的构建版本——比如你用debug包测试,就得把debug keystore的SHA-1指纹填进去,别用release的指纹。另外别忘了在控制台里启用Google Drive API,没启用的话所有请求都会被拒。
权限范围设置错误
检查你请求的Drive权限范围是否正确:- 如果只是读写特定文件,用
https://www.googleapis.com/auth/drive.file就够了;要是需要访问所有文件,得用对应的范围,但这类敏感权限可能需要Google审核,测试阶段建议先用受限范围。 - 确保在构建
GoogleSignInOptions时,通过requestScopes()正确添加了Drive的权限,漏加的话授权肯定过不了。
- 如果只是读写特定文件,用
ActivityResult处理逻辑有误
仔细检查你的结果判断代码:- 如果你用的是旧版
onActivityResult,确认你是先判断返回码为RESULT_OK,再去解析GoogleSignInResult的状态;别搞反了判断顺序,或者把返回码写错。 - 要是用新版Activity Result API,得确认注册的Contract是对应Google登录授权的,别和其他功能的Contract搞混。
- 如果你用的是旧版
授权缓存冲突
有时候旧的授权缓存会干扰新的请求:- 可以先清除应用的缓存和数据,或者在代码里调用
GoogleSignInClient.signOut()后重新发起授权; - 如果之前用其他Google账号登录过,也可能残留旧的授权信息,导致判断出错。
- 可以先清除应用的缓存和数据,或者在代码里调用
设备环境问题
- 确保设备上的Google Play服务是最新版本,旧版本可能不支持新的授权流程;
- 有些定制ROM会限制Google服务的权限,建议在原生Android设备上测试,排除系统层面的干扰。
代码细节遗漏
再核对下构建客户端的代码:- 确认
GoogleSignInClient是用添加了Drive权限的GoogleSignInOptions实例创建的,别不小心用了默认的配置; - 检查发起授权请求的代码,有没有正确调用
startActivityForResult(或新版的launch方法),参数有没有传错。
- 确认
内容的提问来源于stack exchange,提问作者Gastón Saillán
相关产品推荐
相关产品推荐

