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

如何通过Fastlane或Google Play Developer API实现Android应用的延迟发布工作流(上传→审核→暂存→API触发发布)

如何通过Fastlane或Google Play Developer API实现Android应用的延迟发布工作流(上传→审核→暂存→API触发发布)

我之前刚好折腾过完全一样的需求,踩了几个小坑后终于搞定了,下面给你一步步讲清楚怎么实现这个延迟发布的工作流:

一、先搞定「上传→审核→暂存」的第一步

首先你得确保开启了Google Play控制台的Managed Publishing(这个是核心开关),开启后不管用什么发布轨道(track),审核通过的版本都会自动停在「准备发布」状态,不会直接上线,完美契合你要的「暂存」需求。

用Fastlane上传版本的时候,不需要花里胡哨的特殊参数,正常用supply action上传就行,比如我自己日常用的lane是这样的:

lane :upload_for_review do
  # 先打包AAB(如果还没提前打包的话)
  gradle(task: 'bundleRelease')
  
  # 上传到Google Play,自动进入审核流程
  supply(
    track: 'production', # 换成你实际用的轨道,比如beta、alpha或者自定义轨道
    aab: './app/build/outputs/bundle/release/app-release.aab',
    skip_upload_metadata: true, # 不需要更新商店描述、截图的话可以加,节省上传时间
    skip_upload_images: true,
    skip_upload_screenshots: true
  )
end

运行这个lane后,版本就会上传到Google Play,自动进入审核流程,等审核通过后就乖乖待在「准备发布」队列里,完全不会自动上线,这一步就搞定了。

二、用API或Fastlane触发最终发布

当你想手动(或者通过CI/CD系统自动触发)发布时,有两种方式可选:

方式1:用Fastlane一键触发

我自己更倾向于用Fastlane,因为不用单独处理API授权的麻烦事,直接复用之前的supply配置就行。写一个专门的发布lane:

lane :trigger_production_publish do
  supply(
    track: 'production',
    release_status: 'completed', # 核心参数:把待发布的版本设为正式发布状态
    skip_upload_aab: true, # 已经上传过安装包了,不用重复上传
    skip_upload_metadata: true,
    skip_upload_images: true
  )
end

运行这个lane,Fastlane就会自动调用Google Play API,把那个待发布的版本正式推上线。这里的release_status: 'completed'是关键,它会告诉Google Play把处于「准备发布」状态的版本完成发布。

方式2:直接调用Google Play Developer API

如果你需要更灵活的控制(比如在自己的后台系统里触发发布),可以直接调用Google Play的官方API,步骤如下:

  1. 创建编辑会话:所有的发布修改都需要在一个edit会话里完成
  2. 获取目标轨道信息:找到处于readyToPublish状态的版本ID
  3. 更新发布状态:把该版本的状态改成completed
  4. 提交编辑会话:让修改正式生效

我自己用curl写过一个测试脚本,你可以参考(记得替换成你自己的包名和服务账号令牌):

# 1. 创建编辑会话,获取edit ID
EDIT_ID=$(curl -X POST "https://androidpublisher.googleapis.com/androidpublisher/v3/applications/com.your.package.name/edits" \
  -H "Authorization: Bearer YOUR_GOOGLE_SERVICE_ACCOUNT_TOKEN" \
  -H "Content-Type: application/json" \
  | jq -r '.id')

# 2. 获取目标轨道的版本信息,提取待发布的版本ID
RELEASE_ID=$(curl -X GET "https://androidpublisher.googleapis.com/androidpublisher/v3/applications/com.your.package.name/edits/$EDIT_ID/tracks/production" \
  -H "Authorization: Bearer YOUR_GOOGLE_SERVICE_ACCOUNT_TOKEN" \
  | jq -r '.releases[] | select(.status == "readyToPublish") | .id')

# 3. 更新版本状态为正式发布
curl -X PUT "https://androidpublisher.googleapis.com/androidpublisher/v3/applications/com.your.package.name/edits/$EDIT_ID/tracks/production" \
  -H "Authorization: Bearer YOUR_GOOGLE_SERVICE_ACCOUNT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "releases": [
      {
        "id": "'$RELEASE_ID'",
        "status": "completed"
      }
    ]
  }'

# 4. 提交编辑会话,让发布生效
curl -X POST "https://androidpublisher.googleapis.com/androidpublisher/v3/applications/com.your.package.name/edits/$EDIT_ID:commit" \
  -H "Authorization: Bearer YOUR_GOOGLE_SERVICE_ACCOUNT_TOKEN"

这里要注意,你的服务账号必须拥有Release Manager或者Owner权限,不然调用API会返回权限不足的错误。

一些踩坑提醒

  • 如果你用的是自定义发布轨道,只要把上述代码里的track: 'production'换成你的自定义轨道名称就行,逻辑完全通用。
  • 审核通过的版本在「准备发布」状态不会自动过期,只要你不主动取消,什么时候触发发布都可以。
  • 如果你在上传版本时需要同步更新商店元数据(比如应用描述、截图),记得不要加skip_upload_metadata这类跳过参数,不然元数据不会同步到Google Play。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 07:13:16