跳过内容

渠道

一个实时更新频道指向您的应用程序的特定 JS 构建包,这将与任何配置为监听该频道的设备共享。当您 在应用程序中安装 Capgo 实时更新 SDK ,任何配置为该频道的原生二进制文件将在应用程序启动时检查可用更新。您可以随时更改频道指向的构建,并且也可以回滚到以前的构建版本。

设备如何选择频道(优先顺序)

设备如何选择频道(优先级)

当设备检查更新时,Capgo 会按照以下严格顺序(优先级最高)决定使用哪个频道:

  1. 强制设备映射(控制台) – 手动将特定设备 ID 固定到频道。用于紧急调试或在单个真实用户下进行控制测试。
  2. Cloud override (per‑device) via Dashboard or API – 当您在控制台或 API 中更改设备的频道时创建。用于 QA 用户在特征 / PR 频道之间切换或重现用户问题。重新安装二进制文件不会清除它;删除设备条目会清除。
  3. 插件 setChannel() 本地频道 – 当应用程序调用 setChannel() 并且后端验证目标频道允许自我分配时创建。所选频道在该设备上立即生效,且不显示在设备强制 UI 中。
  1. Capacitor配置 defaultChannel (测试构建默认值) – 如果存在于 capacitor.config.* 如果没有force/override/local channel,应用程序将在此通道启动(例如, beta, qa, pr-123。适用于TestFlight / 内部构建,以便测试者自动进入预发布通道。生产构建通常不设置此选项。
  2. Cloud Default Channel (主要路径 ~99% 的用户) – 如果在控制台中标记了默认通道,所有正常用户(无force,无控制台/API 强制,无插件本地通道,无配置defaultChannel)将连接到此处。修改它即可立即推出或回滚—无需新二进制文件。如果您有平台特定的默认值(例如,一个iOS-only,一个Android-only,一个Electron-only),每个设备将连接到匹配其平台的默认值。未设置Cloud Default允许;在这种情况下,设备必须匹配步骤1-4才能接收更新。

最佳实践:

  • 将1-4视为异常/测试层次;当您设置Cloud Default时,真实用户应该流入它。如果您选择不设置一个,请务必明确用户如何连接(通常通过 defaultChannel 在配置或设备级别的覆盖中)。
  • 仅在 defaultChannel 中配置,仅在您明确向测试者分发的二进制文件中。未设置它将使生产逻辑在控制台中集中。
  • 仅在生产中 setChannel() 使用sparingly—主要用于QA或目标诊断。

如果一个通道在平台上(iOS/Android/Electron切换)被禁用,选择过程将跳过它并继续下一项。

概要:Force > Dashboard/API Override > Plugin setChannel() 本地频道 > Config defaultChannel > Cloud Default.

默认频道行为

标题:默认频道行为

设置云端默认值是可选的,但通常作为新设备的通用路径。没有一个,仅有匹配强制映射、覆盖或__CAPGO_KEEP_0__配置的设备才能接收更新。当您选择标记默认值时,请记住以下模式: defaultChannel in the Capacitor config will receive updates. When you do choose to mark defaults, keep these patterns in mind:

  • – 如果频道启用了iOS、Android和Electron,成为唯一的默认值;没有覆盖的设备将附着在这里。 平台特定默认值
  • – 如果您将频道按平台分开(例如 仅启用iOS ios-productionandroid-production With Android 开启时, electron-production

仅 Electron 开启时,标记每个平台的默认值。 iOS 设备将转到 iOS 默认值,Android 设备将转到 Android 默认值,Electron 应用将转到 Electron 默认值。 defaultChannel 记住, capacitor.config.* both occupy the same decision layer. If you set a cloud default, you don’t need to duplicate the value in your Capacitor config—leave defaultChannel 占据同一决策层。如果您设置了云默认值,您不需要在 __CAPGO_KEEP_0__ 配置中重复该值—留空用于生产构建。保留 defaultChannel 用于您希望测试人员或 QA 在非生产通道上启动的二进制文件,即使云默认值不同。

您可以在控制台中随时更改默认值。当您切换默认值时,新设备立即遵循新的路由,现有设备在下一次检查时将遵循正常的优先级规则。

设置通道

设置通道

在入职过程中,您创建了第一个通道(大多数团队将其命名为“生产”),但没有任何锁定—you 可以随时重命名或删除任何通道。要添加额外的通道:

  1. 前往 Capgo 控制台的“通道”部分
  2. 点击“新频道”按钮
  3. 输入频道名称并点击“创建”

频道名称可以是任意的。一个常见的策略是将频道与开发阶段匹配,例如:

  • Development - 在本地设备或模拟器上测试实时更新
  • QA - QA团队验证更新之前的更广泛发布
  • Staging - 在生产环境中进行最终测试
  • Production - 应用程序从应用商店接收的用户版本

在您的应用程序中配置频道

标题:在您的应用程序中配置频道

创建了频道后,您需要配置应用程序以监听适当的频道。在本例中,我们将使用 Development channel.

打开您的 capacitor.config.ts (或 capacitor.config.json)文件。 在 plugins 部分中, defaultChannel 可选 设置 测试构建

import { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
plugins: {
CapacitorUpdater: {
// For a QA/TestFlight build – testers start on the Development channel automatically.
defaultChannel: 'Development',
// Production builds usually omit this so users attach to the Cloud Default channel.
},
},
};

优先考虑省略它,以便设备使用 Cloud Default,除非显式覆盖。 npx cap sync 复制到剪贴板

Channels have several options that control who can receive updates and how updates are delivered. The most important ones are below. You can configure these from the web app, the CLI, or the Public API.

  • 平台过滤器:启用或禁用向
  • iOS, Android发送更新。 Electron 每个渠道的设备数。
  • 在原生环境下禁用自动降级:防止当设备的原生应用版本新于渠道的包(例如,设备在 1.2.3 版本,而渠道有 1.2.2 版本)时发送更新。
  • 允许开发版更新:允许更新开发版(用于测试)。
  • 允许模拟器设备更新:允许更新模拟器/模拟器(用于测试)。
  • 允许设备自我分配:让应用在运行时切换到此渠道(例如,允许在测试时切换到开发版)。如果禁用,则 setChannel将在此渠道中失败。 setChannel 渐进式发布

渠道可以保持稳定的包,同时逐渐向粘性设备群暴露一个单独的发布目标。您可以暂停、恢复、推动、回滚和配置自动失败响应,而不需要为所有人切换渠道。请参阅

渐进式发布

了解交付模型、仪表板工作流、__CAPGO_KEEP_0__字段和__CAPGO_KEEP_1__命令。 渐进式发布 for the delivery model, dashboard workflow, API fields, and CLI commands.

禁用自动更新策略

标题:禁用自动更新策略

使用此选项来限制通道自动分发的更新类型。选项:

  • major:阻止目标包的主版本号高于设备本地基线的主版本号(version_build)。示例: 1.2.3 -> 2.0.0 被阻止; 1.2.3 -> 1.9.0 允许。
  • minor:阻止目标包的主或次版本号与 version_build不同。示例: 1.2.3 -> 1.3.0 被阻止; 1.2.3 -> 1.2.4 允许。
  • patch:最严格的模式。阻止任何主、次或补丁号的变化。仅允许后缀变化 MAJOR.MINOR.PATCH targetLanguage":"Simplified Chinese" 1.0.0-beta.1 -> 1.0.0-beta.2 protectedTokens":["Cloudflare","Capacitor","GitHub","Capgo","code","API","SDK","CLI","npm","bun"] 1.0.0+build.1 -> 1.0.0+build.2 texts":["保持不变。例如:","允许,","允许,","被阻止。", 1.0.0 -> 1.0.1 metadata: 每个捆绑包都需要要求最小的更新版本元数据。通过__CAPGO_KEEP_0__配置","或","。如果缺失,通道将被标记为不配置,更新将被拒绝,直到设置。",
  • metadata: Require a minimum update version metadata on each bundle. Configure via CLI using --min-update-version , --auto-min-update-version更多详细信息和示例,请参见 /docs/__CAPGO_KEEP_0__/commands/#disable-updates-strategy.
  • __CAPGO_KEEP_0__ __CAPGO_KEEP_0__.

__CAPGO_KEEP_0__ version_build__CAPGO_KEEP_0__ version_name.

cli

示例 (CLI):

终端窗口
# Block major updates on the Production channel
npx @capgo/cli@latest channel set production com.example.app \
--disable-auto-update major
# Allow devices to self-assign to the Beta channel
npx @capgo/cli@latest channel set beta com.example.app --self-assign

使用 setChannel() 从您的应用

标题:使用 setChannel() 从您的应用

The setChannel() 此方法允许您的应用在运行时程序性切换通道。这种情况下尤其有用:

  • QA/调试菜单,测试人员可以在菜单中切换通道
  • Beta 程序优选流
  • 特性标志实现
  • A/B 测试场景
import { CapacitorUpdater } from '@capgo/capacitor-updater';
// Switch to the beta channel
await CapacitorUpdater.setChannel({ channel: 'beta' });
// Optionally trigger an immediate update check after switching
await CapacitorUpdater.setChannel({
channel: 'beta',
triggerAutoUpdate: true
});

将捆绑包分配给频道

标题:将捆绑包分配给频道

要部署实时更新,您需要上传一个新的 JS 包构建并将其分配到一个频道。您可以在一步中完成此操作:Capgo CLI。

终端窗口
npx @capgo/cli@latest bundle upload --channel=Development

这将上传您的构建的 Web 资产并将新包作为频道的活动构建。任何配置为监听该频道的应用程序将在下一次检查更新时接收更新。 Development 您还可以从 __CAPGO_KEEP_0__ 控制台的“包”部分分配构建到频道。点击菜单图标旁边的构建,然后选择“分配到频道”以选择该构建的频道。

You can also assign builds to channels from the “Bundles” section of the Capgo dashboard. Click the menu icon next to a build and select “Assign to Channel” to choose the channel for that build.

It’s important to note that bundles in Capgo are global to your app, not specific to individual channels. The same bundle can be assigned to multiple channels.

语义版本控制与 __CAPGO_KEEP_0__ 的 Semver Tester semantic versioning with Capgo’s Semver Tester 预发布标识符 1.2.3-beta.1.

本方法有几个好处:

  • 它清晰地表明了构建之间的关系。 1.2.3-beta.1 显然是一个预发布版本 1.2.3.
  • 它允许在不同通道之间重用版本号,减少混淆。
  • 它使回滚路径清晰。如果您需要从 1.2.3,您知道 1.2.2 是之前的稳定版本。

以下是一个如何将您的捆绑包版本与典型的通道设置对齐的例子:

  • Development 通道: 1.2.3-dev.1, 1.2.3-dev.2等等
  • QA 通道: 1.2.3-qa.1, 1.2.3-qa.2等等
  • Staging 频道: 1.2.3-rc.1, 1.2.3-rc.2等等
  • Production 使用 1.2.3, 1.2.4使用带有预发布标识符的semver

这是一个推荐的方法,但不是严格要求的。关键是找到一个清晰地表达您的构建之间关系并与团队的开发过程一致的版本控制方案。 回滚一个在线更新 标题:回滚一个在线更新

如果您部署了一个在线更新并引入了一个错误或需要被撤销,请您可以轻松地回滚到一个之前的构建。从仪表盘的“频道”部分:

点击您要回滚的频道的名称

找到您要恢复的构建并点击冠军图标

  1. __CAPGO_KEEP_0__
  2. __CAPGO_KEEP_1__ 回滚构建
  3. 确认操作

所选的构建将立即成为该频道的活动构建。应用程序将在下一次检查更新时接收回滚的版本。

自动化部署

自动化部署

对于更高级的工作流程,您可以将实时更新部署作为您的CI/CD管道的一部分自动化。通过将Capgo集成到您的构建过程中,您可以自动上传新包并将其assign到频道,任何时候您推送到特定分支或创建新发布。

查看 CI/CD集成 文档以了解更多关于自动Capgo实时更新的信息。

最少权限PR预览

最少权限PR预览

使用 App 预览 API key when CI needs one temporary channel per pull request but must not manage existing main/default channels. The key remains bound to the owning organization and selected app; it simply has no organization-wide role. Each non-public preview channel it creates receives its own automatic, channel-scoped lifecycle permission.

  1. 请组织管理员创建一个仅限预览应用的安全API密钥并选择 App 预览. 查看 API密钥.
  2. 使用一个唯一的非公开渠道,如 pr-123. 不要传递 --default, --self-assign, --delete-linked-bundle-on-upload.
  3. 滚动选项或
在 PR 关闭时删除所有权渠道和包装:
APP_ID="com.example.app"
PREVIEW_CHANNEL="pr-123"
BUNDLE_VERSION="1.2.3-pr.123"
npx @capgo/cli@latest bundle upload "$APP_ID" \
--apikey "$CAPGO_PREVIEW_KEY" \
--path ./dist \
--channel "$PREVIEW_CHANNEL" \
--bundle "$BUNDLE_VERSION"
npx @capgo/cli@latest channel delete "$PREVIEW_CHANNEL" "$APP_ID" \
--apikey "$CAPGO_PREVIEW_KEY" \
--delete-bundle \
--success-if-not-found

bundle upload --channel 创建一个缺失的频道,上传包并在一个流程中推广它。清理是原子性的并且拥有者检查:该键只能删除它创建的频道和其链接但未共享的包。它不能改变、推广或删除一个现有的主/默认频道、另一个预览键的频道或另一个键的包。

如果审阅者需要一个二维码code或预览URL,管理员必须为应用程序启用预览一次:

终端窗口
npx @capgo/cli@latest app set "$APP_ID" --preview
npx @capgo/cli@latest get-qr "$APP_ID" --channel "$PREVIEW_CHANNEL" --apikey "$CAPGO_PREVIEW_KEY" --url

一个应用预览键无法启用预览,因为它没有应用设置的权限。在GitHub Actions中,运行带有机密的预览作业在 pull_request,不 pull_request_target,并将其限制为同仓库的PRs中 github.event.pull_request.head.repo.full_name == github.repository.

现在您了解了频道,您就可以开始部署实时更新到真实设备了。基本流程是:

  1. 在您的应用中安装Capgo SDK
  2. 配置应用程序以监听您的所需频道
  3. 上传一个构建并将其分配到该频道
  4. 启动应用并等待更新!

对于更详细的教程,请参阅 实时更新部署 指南。快乐更新!

高级频道使用:用户分段

标题为“高级频道使用:用户分段”

频道不仅可以用于开发阶段,还可以用于用户分段。它是一种强大的工具,支持以下功能:

  • 不同用户等级的功能标志
  • A/B测试
  • 逐渐发布新功能
  • 测试新功能的beta测试计划

了解如何在我们的指南中实现这些高级用例: 如何根据计划和渠道对功能标志和A/B测试进行用户分段.

如果您正在使用 渠道 来规划渠道路由和分阶段发布,连接它与 渠道 了解渠道的实施细节 渠道 了解渠道的实施细节 Beta测试解决方案 为产品工作流程在Beta测试解决方案中, 版本目标解决方案 为产品工作流程在版本目标解决方案中,并且 Capgo 环境最佳实践:使用一个移动应用ID进行分阶段 为Capgo 环境最佳实践:使用一个移动应用ID进行分阶段的实际场景。