跳转至正文

版本定向

仅向各原生版本推送其支持的 Bundle

用户会根据自己的节奏从应用商店进行更新,因此您的应用可能会同时存在多个原生版本。Capgo 会检查每个 Bundle 的原生依赖项,根据版本规则拦截更新,并能将每个原生版本路由到其专属的 Channel。

上传前检查 Native 兼容性

bundle 兼容性会将项目中的 Native 包与 channel 上当前生效的 bundle 进行对比。在 CI 中添加 --fail-on-incompatible,可阻止需要新 binary 的上传。

Native 兼容性文档

为每个 bundle 设置 Native 最低版本

将 channel 设为 metadata 策略,并使用 --auto-min-update-version 上传。Native 版本低于 bundle 最低版本的设备会跳过该 bundle,并保留当前 bundle。

版本定向文档

跨 semver 版本线阻止更新

--disable-auto-update major、minor 或 patch 可防止设备接收超出其 Native 版本线的 bundle。这些规则仅比较版本号,不会检查 Native code。

更新类型与版本拦截

每个 Native 版本一个 Channel

在每个 Native Build 的 Capacitor 配置中设置 defaultChannel(例如 v2 或 v3)。每条版本线都有各自的 bundles,旧版本线可以停留在最后一个可用的 bundle 上。

版本定向文档

工作原理

拥有多个 Native 版本的团队如何用 Capgo 发布

通过 CI 配置,让 live update 通道和商店通道并行工作。以下所有命令均来自 Capgo CLI 文档。

  1. 判断 Commit 是否需要 Native Build

    build needed 会将你的 Native 包与 Channel 对比。需要商店发布时,它会输出 yes 并以 code 1 退出;当 live update 就足够时,则输出 no。

    npx @capgo/cli@latest build needed com.example.app --channel production
    build needed 参考文档
  2. 将 Channel 切换为 Metadata 策略

    只需设置一次。此后,每个 bundle 都会带一个最低 Native 版本,低于该版本的设备会跳过这个 bundle。

    npx @capgo/cli@latest channel set production com.example.app \
      --disable-auto-update metadata
    版本定向文档
  3. 每日上传 Live Update

    每次 upload 时保持 --auto-min-update-version 开启。若 bundle 需要当前 channel 不具备的 native code,--fail-on-incompatible 会停止任务。

    npx @capgo/cli@latest bundle upload --channel production \
      --auto-min-update-version \
      --fail-on-incompatible
    Native 兼容性文档
  4. 为新的 Native Release 上传 bundle

    当新的二进制文件发布时,在不使用 --fail-on-incompatible 的情况下 upload 其 bundle。Capgo 会提高版本下限,使旧版本 build 跳过该更新,后续检查则会针对新的 native packages 进行对比。

    npx @capgo/cli@latest bundle upload --channel production \
      --auto-min-update-version
    Native 与 OTA Channel 工作流

Appflow 迁移

正在从 Ionic Appflow 迁移?

Appflow 帮你把 Live Update 和原生版本对应起来。在 Capgo 中,用 channels 和版本规则也能得到同样的效果:

  1. 为每个原生版本分支创建一个 channel,例如 v1 和 v2。
  2. 在每个原生 build 的 Capacitor 配置中,把 defaultChannel 设为对应的 channel。
  3. 把每个 bundle 上传到它所属原生版本分支的 channel。
  4. 上传时保持开启 --auto-min-update-version,这样需要更新原生 code 的 bundle 就会跳过旧 build。
Appflow 迁移指南
每个原生版本分支一个 channel
// capacitor.config.ts in your 2.x native builds
plugins: {
  CapacitorUpdater: {
    defaultChannel: 'v2',
  },
},

# ship a fix to 2.x users only
npx @capgo/cli@latest bundle upload --channel v2 \
  --auto-min-update-version

# 1.x devices stay on their channel's current bundle

常见场景

新增原生插件

您的 2.0 二进制文件新增了相机插件。使用 --auto-min-update-version 上传包含该插件的 bundle,1.x 设备将自动跳过该更新,直到用户安装 2.0。

Native 兼容性文档

渐进式发布

使用 --rollout 向某个 channel 的部分用户发送 bundle,监控安装和失败数据,随后决定全量发布或回滚。

渐进式发布文档

停用旧版本

停止向 v1 channel 上传。该 channel 的设备将保留最后一次可用的 bundle,而 v2 则继续接收更新。

版本定向文档

每个原生版本对应独立 channel

包含三个正在运行的原生版本的布局示例。

  • Native 3.x
    v3
    新 Bundle
  • Native 2.x
    v2
    仅修复
  • Native 1.x
    v1
    不再发布新 Bundle

为 v3 推送新功能,为 v2 推送修复,v1 不再更新。运行 v1 的设备将保留最后一次可用的 Bundle。

使用 Capacitor 构建的应用

公开应用必须兼容新旧 Native 版本

政务、医疗和天气预报类应用可能需要支持旧版 Android 和不同代际的设备。版本定向(Version targeting)能让每个 Native Build 都使用最新的兼容 Web Bundle,而无需让所有用户走同一条更新路径。

e-Título 应用图标 社交

e-Título

需要广泛兼容各类公众设备的政务身份应用。

Google Play 安装量
5490万
应用商店评分
4.8
Conecte SUS 应用图标 医疗

连接 SUS

健康类 App,旧版和新版原生壳可能需要不同的 Web Bundle。

Google Play 安装量
2770万
应用商店评分
4.6
Windy.com - 天气预报应用图标 天气

Windy.com - 天气预报

天气类 App,设备能力和地图性能可能因版本而异。

Google Play 安装量
32.9M
应用商店评分
4.7

客户证言

使用 Capgo 交付的团队怎么说

5.0/5 开发者团队评分 9,400+ 团队 查看评价

no-tone @ Webincode

开发者,Webincode

“能把特定 Device ID 加入指定分组,并只向这些分组推送更改,太救命了。”

Nate van Jole

CTO, 私有

“配置不到一天就完成了。基于 Channel 的发布让我能先在自己的设备上测试,再推给生产用户。”

Sergiu S 的肖像

Sergiu S

drivolino GmbH 首席开发者

“Capgo Capacitor Updater 插件彻底改变了我们的更新发布方式。过去需要几天的工作,现在只需几分钟。”

常见问题

关于线上版本的常见问题

适合需要支持用户在不同时间更新商店 App 的团队。

从不更新原生 App 的用户会怎样?

他们会继续收到与自身原生版本兼容的 bundle。使用 metadata 策略时,最低原生版本高于用户版本的 bundle 会被跳过,用户会停留在当前 bundle 上。

版本定向文档

--disable-auto-update 只按 major 判断,足以防止崩溃吗?

不够。版本规则只比较版本号,所以 minor 或 patch 版本中带的原生改动仍会被发布。请使用 --fail-on-incompatible 或 --auto-min-update-version,它们会检查你的原生依赖包。

Native 兼容性文档

CI 如何判断某个变更是否需要发布商店版本?

运行 build needed,或将 bundle 的 releaseType 与 channel 对比。两者都比较原生依赖包的 metadata。它们看不到 ios/、android/ 或 capacitor.config 下的每一处改动,所以也要在 git 中为这些路径加校验。

在 CI 中选择 OTA 或 Native Build

我们正从 Ionic Appflow 迁移,还能保留版本匹配的更新吗?

可以。为每条 Native 版本线配置一个 channel 并设置 defaultChannel,或者使用带 --auto-min-update-version 的 metadata 策略。Appflow 迁移指南里有完整的设置步骤。

Appflow 迁移指南

如果已经推送了不兼容的 bundle 怎么办?

把 channel 回退到历史记录中最后一个兼容的 bundle,或强制使用内置 bundle,然后发布 Native Build。notifyAppReady() 会回滚启动失败的 bundle,但它不能替代兼容的 Native code。

回滚文档

让每个 Native 版本都跑在它能运行的 bundle 上

在 14 天免费试用期内配置 metadata 策略和 CI 兼容性检查,无需信用卡。