使用Play Developer Reporting API请求ANR数据时遇403权限范围不足问题
问题分析与解决
核心问题:权限范围的适用场景错误
https://www.googleapis.com/auth/playdeveloperreporting这个权限范围仅支持服务账号(Service Account)认证,不能用于你当前使用的「用户OAuth授权流程」(InstalledAppFlow),所以直接替换会触发invalid_scope错误。
而你原本使用的https://www.googleapis.com/auth/androidpublisher是用户授权流程的正确范围,但出现权限不足的问题,大概率是以下原因导致:
解决方案步骤
1. 清除旧授权缓存
首次授权后,Google会在本地生成缓存的凭证文件(通常在~/.credentials/目录,Windows对应路径为C:\Users\<你的用户名>\.credentials\),旧缓存的凭证可能仍使用旧权限范围,未同步更新。
- 找到并删除与你的应用相关的缓存凭证文件,重新运行脚本完成授权流程。
2. 确认账号权限有效性
确保你的Google账号在Play Console中:
- 拥有目标应用的「查看应用信息(只读)」或更高权限(如编辑者、所有者)
- 权限已生效(权限变更可能需要数分钟同步时间)
3. 检查OAuth客户端ID类型
你下载的client_secret.json必须是**「桌面应用」类型**的OAuth客户端ID:
- 登录Google Cloud Console,进入你的项目
- 导航至「API和服务」→「凭据」
- 确认创建的OAuth客户端ID为「桌面应用」类型,若不是则重新创建并下载新的
client_secret.json替换原文件。
修正后的关键脚本片段
保留正确的用户授权范围,清除缓存后重新授权:
# 用户授权流程的正确权限范围 SCOPES = ['https://www.googleapis.com/auth/androidpublisher']
备选方案:改用服务账号认证
若无需手动授权,可切换为服务账号认证模式:
- 在Google Cloud Console创建服务账号,下载JSON密钥文件
- 在Play Console「用户和权限」中添加服务账号邮箱,授予「查看应用信息(只读)」权限
- 替换认证逻辑为服务账号方式:
from google.oauth2 import service_account from googleapiclient.discovery import build # 服务账号专用权限范围 SCOPES = ['https://www.googleapis.com/auth/playdeveloperreporting'] SERVICE_ACCOUNT_FILE = 'service-account-key.json' credentials = service_account.Credentials.from_service_account_file( SERVICE_ACCOUNT_FILE, scopes=SCOPES) def get_authenticated_service(): return build('playdeveloperreporting', 'v1beta1', credentials=credentials)
内容的提问来源于stack exchange,提问作者Wackaloon
相关产品推荐
相关产品推荐

