APK 和轨道

借助 Google Play Developer API,您可以为应用上传新的 APK,并将这些 APK 发布到不同的发布轨道。这样,您就可以部署 Alpha 版和 Beta 版的应用,并向获得批准的用户发布这些应用。此外,您还可以部署分阶段发布版本,该版本会自动向应用的一小部分用户发布。随后,您可以逐步增加可获取该应用版本的用户人数,直至您最终将该版本部署为“正式”版本。

添加和修改 APK

  1. 通过调用 Edits.apks: upload 方法上传一个或多个 APK。

    该方法会将 APK 上传到一个“存储分区”中,系统可在这里将其分配给某个“轨道”,以便将其部署至用户。(如果删除或舍弃修改,上传到相应修改的所有 APK 也会丢失。)

  2. 通过调用 Edits.tracks: update 在“轨道”上发布 APK。您可以在以下轨道上发布 APK:

    • 测试轨道,例如 "alpha""beta"

      Alpha 版和 Beta 版应用会部署至您分配到 Alpha 版和 Beta 版测试组的用户。您可以使用 Google Play 管理中心将用户分配到这些测试组。

    • 内部测试轨道:"internal"

      您应用的内部版本会部署到内部测试轨道(如 Google Play 管理中心中所配置)。

    • 正式版轨道:"production"

      在“正式版”轨道上发布的版本会部署至所有用户。您可以在“正式版”轨道上使用分阶段发布模式,先将相应版本安全地部署至一小部分正式版用户,然后随着您对该版本信心的增强,再逐渐部署至更多的用户。

    简单模式的用户不应在任何轨道上放置多个 APK。使用多 APK 支持功能的高级模式用户可以向每个轨道上传 0 个、1 个或更多 APK。

APK 工作流程示例

本部分介绍了 Tracks API 的典型用法。在这里,我们假定您想要为每个轨道上传新的 APK 版本,并分配一定数量的用户来接收某个分阶段发布版本。(现实中,开发者不太可能在同一次操作中做所有这些事;而是可能会在某一天更新 Beta 版,又在另一天在“正式版”轨道上创建分阶段发布版本,诸如此类。)

  1. 开启新的修改,具体如 Edits 工作流程中所述
  2. 针对要上传的每个 APK 调用 Edits.apks: upload 方法。在该方法的请求正文中传递 APK。(此操作会将 APK 置于某个存储区域中,但不会在某个轨道上进行发布或部署。)该方法会针对您上传的每个 APK 分别返回一个版本代码;当您在某个轨道上发布相应 APK 时,您将使用该版本代码来引用此 APK。
  3. 针对要在上面发布 APK 的每个轨道调用 Edits.tracks: update 方法。在请求正文中,传递包含您想发布的版本的 Edits.tracks resource。例如,如需发布一个版本代码为 88 的 APK,请使用以下代码:

    {
    "releases": [{
      "versionCodes": ["88"],
      "status": "completed"
    }]
    }
    

    此时,用户仍无法获取 APK。与其他修改一样,在您提交之前,相应更改不会发布。

  4. 调用 Edits: commit 方法来提交更改。在您执行此操作后,系统会为每个轨道上的用户提供更新后的 APK 版本。(与所有修改一样,相应更改可能需要几个小时才能生效。)

分阶段发布

如果您想逐步部署新版本的 APK,您可以选择以“分阶段发布”版本的形式进行发布。这样,Google Play 便会自动将其部署至所需比例(由您指定)的应用用户。如果“分阶段发布”的 APK 没有任何问题(如崩溃等),您可以提高接收该版本的用户所占的比例;准备就绪后,您可以将该 APK 部署为新的正式版本。

本部分介绍了分阶段发布 APK,然后再将其提升为正式版需要执行的步骤:

  1. 创建修改,具体如 Edits 工作流程中所述。

  2. 使用 Edits.apks: upload 方法将新 APK 上传到修改。

  3. 使用 Edits.tracks: update 方法在正式版轨道上启动 "inProgress" 分阶段发布版本。选择应接收新 APK 的用户比例。此时,最终用户仍无法获取相应 APK。

    {
    "releases": [{
      "versionCodes": ["99"],
      "userFraction": 0.05,
      "status": "inProgress"
    }]
    }
    

  4. 通过调用 Edits: commit 提交当前这项修改中的更改。在接下来的几个小时内,系统将向用户发布新 APK。所选比例的用户将会收到新 APK。

根据分阶段发布是否成功,您之后可能希望提高可以接收相应版本的用户所占的比例,或暂停发布该版本。

提高可接收分阶段发布版本的用户比例

假定您正在进行分阶段发布且可接收该版本的用户比例为 5%(如上一部分中所述),本部分将介绍在相应版本一切正常的情况下如何提高这一比例。

  1. 创建修改,具体如 Edits 工作流程中所述。

  2. 使用 Edits.tracks: update 方法更改正式版轨道上的 "inProgress" 分阶段发布版本。提高应接收新 APK 的用户所占的比例:

    {
    "releases": [{
      "versionCodes": ["99"],
      "userFraction": 0.1,
      "status": "inProgress"
    }]
    }
    

  3. 通过调用 Edits: commit 提交当前这项修改中的更改。在接下来的几个小时内,系统将向用户发布新 APK。所选比例的用户将会收到新 APK。

暂停分阶段发布

假定您正在进行分阶段发布且可接收该版本的用户比例为 5%(如上一部分中所述),本部分将介绍在您发现问题的情况下如何暂停分阶段发布。

  1. 创建修改,具体如 Edits 工作流程中所述。

  2. 使用 Edits.tracks: update 方法更改正式版轨道上的 "inProgress" 分阶段发布版本。将状态设为 "halted"

    {
    "releases": [{
      "versionCodes": ["99"],
      "status": "halted"
    }]
    }
    

  3. 通过调用 Edits: commit 提交当前这项修改中的更改。新用户将无法再获取您的这个版本。

如果您以后决定恢复已暂停的版本,只需将其状态重新设为 "inProgress" 即可。

完成分阶段发布

如果您对自己分阶段发布的版本感到满意,并想要向所有用户发布相应版本,可以将该版本的状态设为 "completed"

  1. 创建修改,具体如 Edits 工作流程中所述。

  2. 使用 Edits.tracks: update 方法更改正式版轨道上的 "inProgress" 分阶段发布版本。将状态设为 "halted"

    {
    "releases": [{
      "versionCodes": ["99"],
      "status": "completed"
    }]
    }
    

  3. 通过调用 Edits: commit 提交当前这项修改中的更改。在接下来的几个小时内,系统将向用户发布新 APK。所选比例的用户将会收到新 APK。

草稿版本

借助草稿版本,您可以自动上传 APK,并通过 API 创建版本。之后,您可以通过 Google Play 管理中心部署相应版本。如需在某个轨道上创建草稿版本,请执行以下操作:

  1. 开启新的修改,具体如 Edits 工作流程中所述
  2. 针对要上传的每个 APK 调用 Edits.apks: upload 方法。在该方法的请求正文中传递 APK。该方法会针对您上传的每个 APK 分别返回一个版本代码;当您将 APK 分配到某个版本时,您将使用该版本代码来引用相应的 APK。
  3. 针对要在上面进行发布的每个轨道调用 Edits.tracks: update 方法。在请求正文中,传递包含您想创建的草稿版本的 Edits.tracks resource。例如:

    {
    "releases": [{
      "name": "My draft release",
      "versionCodes": ["88"],
      "status": "draft"
    }]
    }
    

  4. 调用 Edits: commit 方法来提交更改。现在,您可以通过 Google Play 管理中心或 API 检查相应草稿版本并进行发布。

指定版本说明

在发布应用的新版本时,您可以通过在相应版本中指定版本说明来向用户重点介绍相关的新变化。

为此,请在向 Edits.tracks: update 方法提供 Edits.tracks resource 时使用 "releaseNotes" 字段。

{
  "releases": [{
      "name": "Release with notes",
      "versionCodes": ["88"],
      "status": "completed",
      "releaseNotes": [
        {"language": "en-US", "text": "Describe what's new in this release."}
      ]
  }]
}