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
相关产品推荐
相关产品推荐

