发布渠道

编辑页面


For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.

本文档已于 2022 年 8 月归档,且不会再收到任何进一步更新。要了解为何发布通道已被弃用,请参阅我们关于 EAS Update 的博文。我们建议改为使用 EAS Update

简介

在 Expo 中使用发布通道,可以通过向用户提供一个 URL 或配置你的独立应用,来向他们推送应用的不同版本。如果你有以下情况,应使用发布通道:

  • 你有一个已上线的应用,并且需要一个测试环境。
  • 你有多个版本的应用。

使用发布通道发布

通过运行以下命令,在某个发布通道上发布你的更新:

Terminal
# 发布到发布通道 <your-channel>
expo publish --release-channel <your-channel>

你的团队可以在 Expo Go 应用中看到这个发布通道,方式是使用带参数的 URL https://exp.host/@username/yourApp?release-channel=<your-release-channel>。如果你不指定发布通道,你将发布到 default 通道。

发布通道名称只能包含小写字母、数字以及特殊字符 ., _-

使用发布通道构建

eas.json 中的构建配置里设置你的发布通道:

{ "build": { "your-build-profile": { "releaseChannel": "your-channel" } } }

然后,使用 EAS CLI 运行 eas build --profile <your-build-profile> 来构建你的独立应用。生成的二进制文件只会拉取在指定发布通道下发布的版本。如果你不指定发布通道,你的二进制文件将从 default 发布通道拉取版本。

从代码中访问通道

你可以通过 expo-updates 中的 Updates.releaseChannel 字段访问更新所发布到的发布通道。

在 Expo Go 的开发环境中,Updates.releaseChannel 始终为 'default'

示例工作流

假设你有一个用于在 Expo Go 中测试的 Staging 栈,以及一个用于通过 TestFlight 发布并最终推进到 App Store 的 Production 栈。

在 staging 栈上,运行 expo publish --release-channel staging。你的测试用户可以通过在 URL 的查询参数中指定发布通道(即)https://exp.host/@username/yourApp?release-channel=staging 来查看应用的 staging 版本,然后在他们的网页浏览器中打开该 URL,最后使用 Expo Go 应用扫描二维码。或者,他们也可以直接在移动设备上打开该 URL。

在 production 栈上,通过运行 expo publish --release-channel prod-v1 发布你的应用 v1。你可以通过运行 eas build --platform ios --profile prod,并在 eas.jsonprod 构建配置里将 releaseChannel 设置为 prod-v1,将这个版本构建为一个独立 ipa:

{ "build": { "prod": { "releaseChannel": "prod-v1" }, "staging": { "releaseChannel": "staging" } } }

你可以通过发布到 prod-v1 发布通道来向你的应用推送更新。独立应用会使用 prod-v1 发布通道上最新的兼容版本进行更新。

如果你有一个新版本,不想让 v1 用户收到,可以通过运行 expo publish --release-channel prod-v2 发布应用 v2,将你的 prod 构建配置中的 releaseChannel 设置为 prod-v2,然后再次运行 eas build --platform ios --profile prod 进行构建。只有带有 prod-v2 ipa 的用户才会从该发布通道拉取版本。

你可以继续使用 expo publish --release-channel prod-v1 更新你应用的 v1 版本,而那些尚未在 Apple App Store 中更新到最新 prod-v2 ipa 的用户,将继续收到最新的 prod-v1 发布内容。

在裸工作流中使用发布通道

你可以通过修改 Expo.plist(iOS)中的 EXUpdatesReleaseChannel 键,或 AndroidManifest.xml(Android)中的 releaseChannel meta-data 标签值,来编辑原生项目的发布通道。阅读本指南 了解更多关于在裸应用中配置更新的信息。

使用发布通道进行环境变量配置

环境变量并不会显式存在,但你可以利用发布通道来实现这一点!

假设你有如下发布构建的工作流:

Terminal
# 发布到发布通道 prod-v1expo publish --release-channel prod-v1
# 发布到发布通道 prod-v2expo publish --release-channel prod-v2
# 发布到发布通道 prod-v3expo publish --release-channel prod-v3

# 发布到发布通道 staging-v1expo publish --release-channel staging-v1
# 发布到发布通道 staging-v2expo publish --release-channel staging-v2

你可以创建一个函数来查找特定发布并相应地调整应用行为:

import * as Updates from 'expo-updates'; function getEnvironment() { if (Updates.releaseChannel.startsWith('prod')) { // 匹配 prod-v1、prod-v2、prod-v3 return { envName: 'PRODUCTION', dbUrl: 'ccc', apiKey: 'ddd' }; // 生产环境设置 } else if (Updates.releaseChannel.startsWith('staging')) { // 匹配 staging-v1、staging-v2 return { envName: 'STAGING', dbUrl: 'eee', apiKey: 'fff' }; // 预发布环境设置 } else { // 假定任何其他发布通道都是开发环境 return { envName: 'DEVELOPMENT', dbUrl: 'aaa', apiKey: 'bbb' }; // 开发环境设置 } }