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

编程下载Play商店统计数据时Google Cloud Storage访问403权限报错求助

问题根因

你遇到的403权限报错由两个原因共同导致:一是未完成Google Play Console的服务账号权限配置,二是调用GCS API的代码逻辑存在问题。

第一步:完成Google Play Console权限配置(View app information设为Global)

操作步骤如下:

  • 使用拥有Google Play开发者账户所有者权限的账号登录Google Play Console
  • 左侧菜单栏找到「用户和权限」选项点击进入
  • 在用户列表中找到你使用的服务账号邮箱(即报错信息里的xxxx@xxxx.iam.gserviceaccount.com),点击右侧的「管理权限」
  • 切换到「账户权限」标签页,向下滑动找到「查看应用信息」权限
  • 该权限右侧的访问范围下拉框选择「全局(Global)」,同时勾选权限前的复选框
  • 下拉到页面底部点击「保存」,权限配置生效最多需要等待15分钟,不要立刻测试
第二步:修正代码错误

你的代码存在两个可优化的问题:

  1. 无需手动解析服务账号密钥文件,直接使用官方库封装的凭证加载逻辑更稳妥
  2. storage.objects().get() 不支持通配符*匹配对象名,如果你要匹配前缀相同的多个报告文件,需要先调用list接口查询匹配的对象,再逐个获取
    修正后的代码示例如下:
import os
import json
from google.oauth2 import service_account
from googleapiclient.discovery import build

# 替换为你实际的配置参数
cloud_storage_bucket = 'pubsite_prod_rev_xxxx'
report_prefix = 'installs_com.xxx.xxxx_201701_overview' # 去掉通配符,仅保留前缀
SCOPES = ['https://www.googleapis.com/auth/devstorage.read_only']

# 自动加载环境变量指定的服务账号凭证
credentials = service_account.Credentials.from_service_account_file(
    os.getenv('GOOGLE_APPLICATION_CREDENTIALS'),
    scopes=SCOPES
)

storage = build('storage', 'v1', credentials=credentials)

# 先查询匹配前缀的所有报告对象
response = storage.objects().list(
    bucket=cloud_storage_bucket,
    prefix=report_prefix
).execute()

if 'items' in response:
    for item in response['items']:
        # 逐个获取对象内容
        file_content = storage.objects().get(
            bucket=cloud_storage_bucket,
            object=item['name']
        ).execute()
        print(f"获取文件{item['name']}成功:", file_content)
else:
    print("没有找到匹配前缀的报告文件")
额外校验项

如果配置完权限还是报错,可以做如下检查:

  • 确认服务账号是被添加到了Google Play Console的用户列表中,而不是仅添加到了GCP项目的IAM配置里
  • 确认你要下载的报告所属的应用,没有单独给该服务账号设置限制权限
  • 确认对应时间段的安装报告确实存在,你可以先在Google Play Console的统计页面手动查看是否有2017年1月的安装报告

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:18:03