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

Android调用Gmail API读邮件提示insufficient authentication scopes报错如何解决

Android Gmail API 403权限不足问题解决

问题原因

核心原因是OAuth授权阶段申请的权限范围不包含Gmail读取权限:
你在构建GoogleSignInOptions时仅申请了Scopes.DRIVE_APPFOLDER(谷歌云盘目录权限),没有申请Gmail相关权限,导致后续换取的AccessToken没有Gmail API的调用权限,最终触发insufficientPermissions报错。
额外可能的触发原因:

  • 之前用错误的Scope完成过授权,本地缓存的旧授权信息没有清理,修改Scope后没有重新触发授权流程
  • 代码中定义的SCOPES常量(换Token时传入的参数)没有包含正确的Gmail权限
  • Google Cloud控制台对应项目没有启用Gmail API

修复方案

  • 第一步:修改登录授权的Scope配置,添加Gmail读取权限
    先导入所需类:
    import com.google.android.gms.common.api.Scope;
    import com.google.api.services.gmail.GmailScopes;
    
    替换原有GoogleSignInOptions构建逻辑:
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            // 替换原DRIVE_APPFOLDER,添加Gmail只读权限,有其他需求可追加对应Scope
            .requestScopes(new Scope(GmailScopes.GMAIL_READONLY))
            .requestIdToken(getString(R.string.server_client_id))
            .requestServerAuthCode(getString(R.string.server_client_id))
            .requestEmail()
            .build();
    
  • 第二步:确认换Token时传入的SCOPES常量和登录申请的权限一致
    确保你代码里的SCOPES定义如下(按需追加其他需要的权限):
    private static final List<String> SCOPES = Collections.singletonList(GmailScopes.GMAIL_READONLY);
    
  • 第三步:清理旧授权缓存
    先调用mGoogleSignInClient.signOut()清除本地已缓存的账号授权信息,或直接卸载重装测试APP,确保下次打开会重新触发授权弹窗,申请Gmail读取权限。
  • 第四步:确认Google Cloud后台配置
    检查你创建OAuth凭证的项目已经启用了Gmail API,没有调用限制。

内容的提问来源于stack exchange,提问作者Vatsal Dholakiya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:45:04