You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 16:01:30