Windy.com - 天气预报
天气应用需要谨慎地进行生产环境扩展,以修复地图、警报和导航问题。
- Google Play 安装量
- 32.9M
- 应用商店评分
- 4.7
通过 CLI 或 CI 上传新的 web bundle。设备会在后台下载,并在下次应用回到前台时运行。按百分比发布,在 Observe 中监控,出问题就回滚。
问题
定位 Bug
监控或客服反馈页面显示异常。而修复方案仅需几行 JavaScript 或 CSS。
构建新的二进制文件
你需要升级版本号,分别为 iOS 和 Android 构建,并准备两次商店提交。
等待审核
商店审核通常需要 24–48 小时,有时甚至更久。一旦被拒,等待又要重新开始。
等待用户更新
即使审核通过,用户仍需手动安装新版本。在此之前,他们运行的仍是旧版 code。
每一步都会拉长从修复完成到修复在用户设备上生效的时间。
24–48h+
典型的应用商店审核时间
Apple 和 Google 会审核每一个新的二进制文件。审核通常需要 24–48 小时,有时甚至更久,一旦被拒就必须重新提交。
每位用户
商店更新取决于各台设备
只有当用户或其自动更新设置安装时,商店更新才会到达设备。部分设备可能会长期停留在旧版本上。
2 个商店
每次修复都需要两次提交
同一个 Web 修复需要分别通过 App Store 和 Google Play,且各自都有独立的审核和发布流程。
解决方案
这是 Capgo 的默认更新行为。无需更新提示,无需强制重启,针对 Web 层变更也无需提交商店审核。
当 App 进入前台时,以及在保持打开状态下的每 10 分钟,updater 都会向 Capgo 请求该 channel 的最新 bundle。
进入前台时
用户继续使用当前版本时,新 bundle 会在后台下载。通过 delta updates,仅下载发生变化的文件。
无感中断
当用户退出 App 时,updater 会安装该 bundle。下次打开时,用户即可运行新版本。
下次进入前台时
需要用户在打开 App 时立即看到新版本?Direct update 模式会在显示 splash screen 时于启动阶段应用更新。
了解 direct updates工作原理
针对已上架商店的 Capacitor 应用进行典型发布。以下所有命令均来自 Capgo CLI 文档。
运行设置向导,并确保您的应用在启动后调用 notifyAppReady()。如果 bundle 未能调用该方法,则会自动回滚。
npx @capgo/cli@latest init
# in your app start-up code
await CapacitorUpdater.notifyAppReady()
notifyAppReady() 文档
使用 --delta 让设备仅获取变更文件,并使用 --rollout 从少量设备开始。其余用户将继续使用稳定的 bundle。
npx @capgo/cli@latest bundle upload --channel production --delta --rollout 5
渐进式发布文档
通过设置失败率阈值来开启自动暂停(500 个基点即 5%)。如果失败率超过阈值,Capgo 会回滚 rollout。在运行期间可以通过 Observe 查看新版本情况。
npx @capgo/cli@latest channel set production \
--auto-pause-enabled \
--auto-pause-failure-rate-bps 500 \
--auto-pause-action rollback
Observe 文档
当各项指标符合预期时,将 bundle 推送到该 channel 下的所有设备。若指标异常,则将灰度版本回滚至 stable。
npx @capgo/cli@latest channel set production --rollout-promote
# or, if something looks wrong
npx @capgo/cli@latest channel set production --rollout-rollback
回滚文档
生产团队用来频繁发布、又不会让用户感到意外的控制手段。
使用 --delta 上传,设备只下载自当前 bundle 以来发生变化的文件。很少变动的大型资源只需下载一次。
--delta
仅下载变更的文件
将新 bundle 发送给 channel 中随机且固定的一部分用户,其他人继续使用稳定版 bundle。你可以通过 CLI 或控制台提高比例、正式发布或回滚。
1–5%
典型的首次发布步骤
每次更新都必须证明其已成功启动。如果新的 bundle 未能及时调用 notifyAppReady(),设备将回退到上一个可用的 bundle,并将新 bundle 标记为失败。
10s
自动回滚前的默认 appReadyTimeout
Capgo 交付的是 Capacitor Web 层:包括 JavaScript、CSS 和资源文件。它不会更改 Native Build、插件、权限、Entitlements 或 App Store 元数据。应用审核是针对 App 本身的,因此您仍需负责遵守政策并确保通过审核。
部署 Live Update 后的日常发布工作。每个卡片均链接至文档。
Capgo 自 2021 年以来一直为生产级 App 提供 Live Update 服务。
找到符合团队需求的解决方案
使用 Capacitor 构建的应用
天气、公共卫生和电信类应用依赖准确的界面、警报和导航。生产环境更新可帮助发布已审核的界面修复,同时监控采用情况,再决定是否扩大范围。
天气应用需要谨慎地进行生产环境扩展,以修复地图、警报和导航问题。
公共卫生应用需要快速、可靠的更新来发布指南和服务信息。
电信账户应用,其警报和账户展示界面变更频繁。
drivolino GmbH 首席开发者
“Capgo Capacitor Updater 插件彻底改变了我们的更新发布方式。过去需要几天的工作,现在只需几分钟。”
NuTriQ 创始人
“无需等待完整的 App Store 审核周期,就能即时推送生产环境的 OTA 更新,这为我们带来了巨大的运营优势。”
nethead emeritors
“这个 updater 插件做得太棒了。它在我这儿运行完美,live updates 对快速测试迭代是极大的加速。”
常见问题
了解更新如何到达设备,以及出现问题时该如何处理。
默认情况下,App 在进入前台时以及保持打开状态的每 10 分钟会检查一次更新。它会在后台下载新的 bundle,并在用户退出 App 时进行安装,下次打开时即可运行。autoUpdate 设置可以更改此行为。
更新行为文档可以。在更改 channel 的 bundle 后,通过控制台发送更新通知,或在 bundle upload 时添加 --send-update-notification。设备会收到一条静默推送并立即检查。这需要配合 iOS 和 Android 推送凭据使用 Capgo Notifications。交付遵循尽力而为原则:离线或被强制退出的 App 会在下次启动时进行检查。
发送更新通知如果新的 bundle 在 10 秒内(默认的 appReadyTimeout)未调用 notifyAppReady(),设备将回滚到上一个可用的 bundle,并将新的 bundle 标记为失败。对于不影响 App 启动的 Bug,请回滚渐进式发布(progressive rollout),或从 channel 历史记录中选择之前的 bundle。
回滚文档使用 --rollout 上传,可将 bundle 推送给 channel 中随机且固定的一批用户,其他人仍留在 stable 版本。可在 CLI 或控制台提高百分比、全量发布或回滚。失败率超过阈值时,Auto-pause 会自动暂停发布,避免影响更多用户。
渐进式发布文档Live updates 替换的是 Web 层:JavaScript、HTML、CSS 和 assets。Native plugins、Capacitor 升级、capacitor.config 的更改以及 iOS 或 Android 项目文件都需要通过应用商店发布。Capgo 会在上传时检查 bundle 的原生兼容性,channel 也可以阻止旧版二进制文件获取更新。
Native 兼容性文档在试用期间,在自己的 App 上走一遍完整流程:上传一个 bundle,rollout 到几台设备,再回滚。