指南摘要
将 GitHub Actions Android 注册检查接入签名后的发布流程,保护 Google API 密钥,区分业务状态与可重试的服务错误。
适合人群: 用 GitHub Actions 构建、签名和发布 Android 应用的团队。
发布检查步骤
- 从目标 release 变体获得正式 applicationId。
- 从已签名产物读取公开证书 SHA-256。
- 在受保护的发布 job 中调用官方 API,或使用团队受控服务。
- 未注册或证书不匹配时停止推广,人工放行须有明确政策及证据。
关键事实
不要把 API 密钥、keystore 密码或私钥打印进日志。公共证书指纹不是私钥,但也应按团队的发布证据策略保留。
详细说明
在受保护的发布 job 中解析状态
把 API 密钥保存在 GitHub Actions Secrets,限制其可调用的 API,避免让不受信任的 PR 代码读取发布凭据。固定第三方 Actions 版本,并只保存必要的状态记录。
下面示例展示包名查询和 REGISTERED 关卡,尚未包含证书参数。要验证签名,需从真实产物取得 SHA-256,并按官方 Status API 的 certificateFingerprint 参数扩展请求;示例包名也必须替换为目标 release 变体。
用 jq 读取 state,不依赖自然语言错误提示。NOT_REGISTERED 或证书不匹配需要人工整改;RESOURCE_EXHAUSTED、INTERNAL 和 UNAVAILABLE 才按配额与服务情况进行有上限的指数退避。
- 禁止 echo API 密钥。
- 只有可信发布上下文可以访问凭据。
- 输出中保留状态与时间,不附带私有签名材料。
- name: Check Android registration
env:
API_KEY: ${{ secrets.ANDROID_DEVELOPER_ID_API_KEY }}
PACKAGE_NAME: com.example.app
run: |
curl --fail --silent --show-error \
-H "X-Goog-Api-Key: $API_KEY" \
"https://androiddeveloperidstatus.googleapis.com/v1/packages/$PACKAGE_NAME/packageRegistrationStatus:check" \
| tee status.json
test "$(jq -r .state status.json)" = "REGISTERED"填入正式包名;要核对实际 APK 的签名,再补充该产物的公开证书 SHA-256。查询用于发现登记问题,不能代替商店审核。
运行状态检测 →常见问题
CI 可以直接调用 PkgReady 浏览器接口吗?
不应这样集成。CI 应使用团队自己管理的 Google 项目和受保护密钥调用官方服务端 API,以便明确配额、权限和日志责任。浏览器检查流程不承担匿名自动化批量服务。
哪些情况应该阻止发布?
未注册或证书不匹配应停止推广并进入整改流程。配额或服务错误则是基础设施问题,需要有限重试和清楚的失败说明;不能将查询失败当作注册通过,也不能无限循环。
来源与审核
最后审核: