Android应用用Credential Manager API获取Gmail readonly权限遇异常
解决Credential Manager请求Gmail Readonly权限的配置问题
核心问题分析
你遇到的Developer console is not set up correctly错误,以及授权同意界面不出现的问题,核心原因是未在Credential Manager请求中显式声明OAuth2权限范围,同时可能存在Client ID配置或同意屏幕的细节遗漏。
具体修复步骤
1. 向GetGoogleIdOption添加OAuth2 Scope
你的代码仅配置了Google ID Token获取逻辑,未声明gmail.readonly权限范围,这是授权界面不触发的关键。修改代码添加scope:
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder() .setFilterByAuthorizedAccounts(filterByAuthorizedAccounts) .setServerClientId(CLIENT_ID) // 必须使用Android类型的Client ID .setScopes(listOf("https://www.googleapis.com/auth/gmail.readonly")) // 新增权限范围声明 //.setNonce("<nonce string to use when generating a Google ID token>") .build()
2. 确认使用正确的Android Client ID
- 必须使用Android类型的Client ID,Web应用Client ID无法在Android平台触发系统级授权同意界面,仅能完成基础登录。
- 再次核对Client ID对应的包名和SHA-1指纹:确保云控制台中Android凭证的包名与应用
applicationId完全一致,同时添加当前测试环境的SHA-1(包括debug和release版本指纹)。
3. 检查OAuth同意屏幕配置细节
- 确保同意屏幕用户类型设置为外部(测试阶段无需审核),且已将测试账号添加到「测试用户」列表。
- 确认
https://www.googleapis.com/auth/gmail.readonly已添加到同意屏幕的「已授权范围」,注意scope拼写必须完全正确(避免你提到的多余点号错误)。
4. 正确处理授权结果
成功获取Credential后,需从GoogleIdCredential中提取授权码,用于后续交换访问令牌调用Gmail API:
private fun handleSignIn(result: GetCredentialResponse) { val credential = result.credential if (credential is GoogleIdCredential) { val authorizationCode = credential.authorizationCode // 获取授权码 // 用授权码向服务器交换访问令牌,进而调用Gmail API } }
错误原因补充
Developer console is not set up correctly错误通常由以下情况导致:
- 请求的scope未在OAuth同意屏幕中配置
- 使用了错误类型的Client ID
- Client ID的包名/SHA-1与应用不匹配
内容的提问来源于stack exchange,提问作者Himanshu Bansal
相关产品推荐
相关产品推荐

