跳过主要内容

Cordova 热 Code 推送替代方案 2026

cordova-code推送和Cordova CodePush已经死亡。以下是Cordova热code推送的维护版本,包括设置、迁移步骤和回滚。

文章来源

马丁·多纳迪厄

作者

Valeria

审阅者

乔丹

编辑

Cordova 热 Code 推送替代方案 2026

如果您正在寻找 Cordova 热 code 推送的替代方案,很可能是因为 cordova-hot-code-push-plugin 并且 Microsoft 的 Cordova 的 CodePush 都停止工作或停止维护。今天维护的选项是 @capgo/cordova-updater, Cordova 的热更新插件,该插件将 Cordova Android 13+ 和 Cordova iOS 7+ 应用程序带来 Capgo 实时更新,带有频道、回滚和加密包,且不强制您迁移到 Capacitor 之前。

2026年 Cordova 实时更新的状态

cordova-hot-code-push 已存档

The nordnet/cordova-hot-code-push 仓库已在 GitHub 上存档。最后一次 code 的修改是在 2018 年 9 月,最后一次 npm 的发布是 cordova-hot-code-push-plugin 是 1.5.3。它是为 Cordova 平台和文件基WebView加载设计的。现代 Cordova Android 将应用程序从 https://localhost 通过路径处理器提供,Cordova iOS 使用 WKWebView 方案。一个假设 app:// 加载不符合该模型的插件,并且没有人更新它。 file:// 现有的安装可能仍然会工作,如果您从未更新 Cordova 平台。然而,这是陷阱:您无法移动到当前的 Cordova Android 或 Xcode 而不冒着更新机制的风险。

CodePush for Cordova 已经消失

微软已经

,2022 年结束了 App Center 的 Cordova 支持,并于 2025 年 3 月 31 日退役了核心 App Center 服务,包括构建、分发和 CodePush。该插件与 App Center 的 CodePush 服务进行通信,因此没有后端可以提供更新。如果您已经将 CodePush 服务器自主托管,则仍然依赖于存档的客户端插件。 cordova-plugin-code-pushIonic Appflow

连接了 Cordova 应用程序到 Ionic Appflow 的实时更新。Ionic 已经宣布 Appflow 将被关闭,因此使用它的团队正在寻找替代方案。我们在

cordova-plugin-ionic Appflow 替代方案指南 中讨论了该路径。.

什么一个替代方案需要

在选择任何工具之前,检查它是否符合以下要求:

要求 为什么它很重要
与当前 Cordova Android 和 iOS 一起工作 商店要求强制平台升级:从 2026 年 4 月开始,Xcode 26 对 App Store 上传必不可少,Google Play 年度 Android 目标 API 升级
不依赖于 cordova-plugin-ionic-webview 该插件过时且与现代方案处理器冲突
自动回滚 一个坏包不能砸坏应用
频道 在内部用户测试之前测试所有人
签名或加密包 防止网络传输的 code 被篡改
版本目标 从不发送需要更高版本原生 shell 的 JavaScript
CI 友好的 CLI 发布应该只需要在管道中执行一个命令
维护 查看最近的发布,不仅仅是查看星星

Capgo 为 Cordova

@capgo/cordova-updater 使用相同的 JavaScript API @capgo/capacitor-updater 使用相同的 Capgo 云后端。 Cordova、 Capacitor 和 Electron 客户端的包、频道、统计和签名都一样

要求

  • Cordova CLI 12+
  • Cordova Android 13+(默认) https://localhost/ scheme)
  • Cordova iOS 7+ (默认) app://localhost/ scheme)
  • cordova-plugin-ionic-webview removed)

检查您的平台:

cordova platform ls

如果需要升级,请升级:

cordova platform rm android && cordova platform add android@latest
cordova platform rm ios && cordova platform add ios@latest

安装

在Capgo (控制台或CLI)中创建应用,然后使用应用 ID 添加插件:

bunx @capgo/cli@latest login
bunx @capgo/cli@latest app add com.example.app --name "My Cordova App"

cordova plugin add @capgo/cordova-updater --variable APP_ID=com.example.app
cordova prepare android ios

您可以在安装时设置更多选项。这些是插件变量,因此请运行 cordova prepare 修改它们后

cordova plugin add @capgo/cordova-updater \
  --variable APP_ID=com.example.app \
  --variable DEFAULT_CHANNEL=production \
  --variable AUTO_UPDATE=atBackground \
  --variable APP_READY_TIMEOUT=10000

AUTO_UPDATE 使用默认值 atBackground, 在后台下载更新并在下次应用进入后台时应用它们。其他模式包括 atInstall, onLaunch 和 off for

告诉插件应用启动正确

这是你不能跳过的一行。调用 notifyAppReady() 在 deviceready。如果一个新捆绑在 APP_READY_TIMEOUT 毫秒内没有调用它,插件将其标记为失败并回滚到最后一个工作捆绑。

document.addEventListener('deviceready', async () => {
  const { Updater } = cordova.plugins;
  await Updater.notifyAppReady();
}, false);

在你的应用实际渲染后调用它,而不是在脚本的顶部,所以在启动过程中崩溃的捆绑包可以被检测到。

手动更新流程

如果你设置 AUTO_UPDATE=off, 你控制何时检查、下载并应用:

document.addEventListener('deviceready', async () => {
  const { Updater } = cordova.plugins;
  await Updater.notifyAppReady();

  const latest = await Updater.getLatest();
  if (latest.url && !latest.error) {
    const bundle = await Updater.download({
      url: latest.url,
      version: latest.version,
      checksum: latest.checksum,
    });
    // Applied on next background/restart
    await Updater.next({ id: bundle.id });
  }
});

TypeScript类型与包一起发布:

import type { UpdaterPlugin } from '@capgo/cordova-updater';

declare const cordova: { plugins: { Updater: UpdaterPlugin } };

发布更新:

构建你的: www 文件夹并上传:

bun run build
bunx @capgo/cli@latest bundle upload com.example.app --path ./www --channel production

在CI中放置它,测试之后。 The 实时更新页面 显示频道发布、统计和从控制台回滚。

从cordova-hot-code-push迁移

  1. 移除旧插件及其配置。 删除: cordova-hot-code-push-plugin, chcp section config.xml, 和 cordova-hcp CLI 和 chcp.json / chcp.manifest 生成
  2. 移除 cordova-plugin-ionic-webview 如果存在,测试应用在默认 Cordova WebView 上运行。
  3. 升级 Cordova 平台 到 Android 13+ 和 iOS 7+。
  4. 安装 @capgo/cordova-updater 并添加 notifyAppReady().
  5. 发布新商店版本。 旧安装保留旧插件。只有新二进制包含 Capgo 更新器。
  6. 上传您的第一个捆绑包 到测试频道,检查设备,然后推广到生产。

那些不从商店更新的用户将继续使用旧机制,直到他们这样做。 如果旧的更新服务器仍然有效,请在过渡期间保持它在线,或者接受那些用户在安装新二进制文件之前不会获得OTA更新。

从 Cordova CodePush 迁移

  • 替换 codePush.sync() 使用 notifyAppReady() 和自动模式或流程。 getLatest / download / next 替换部署密钥
  • 频道(DEFAULT_CHANNEL).
  • 替换 code-push release-cordova ) bunx @capgo/cli@latest bundle upload.
  • 移除 CodePushDeploymentKey 针对App Center用户的逐步版本,请参阅 config.xml.

App Center迁移指南 安全性和商店规则.

加密和签名

  • 设置 Set PUBLIC_KEY 在安装时使用CLI的加密密钥,设备只接受针对您的应用签名的捆绑包。
  • 两者都允许通过无线电更新解释的__CAPGO_KEEP_0__,例如JavaScript,只要您不改变应用的目的或添加需要审查的功能。原生__CAPGO_KEEP_1__、新插件和权限更改需要商店发布。 Both allow updating interpreted code such as JavaScript over the air, as long as you do not change the app’s purpose or add features that would need review. Native code, new plugins and permission changes need a store release.
  • 如果一个捆绑包需要一个仅在新二进制中存在的原生插件,请将其目标设置为原生版本。有关__CAPGO_KEEP_0__兼容性的文档在 Capgo兼容性 live update 兼容性 如何说明。

故障排除

应用下载了最新的包,但应用仍显示旧版本。 应用程序下载了捆绑包,但显示的是旧版本。 cordova-plugin-ionic-webview您仍在使用

或自定义方案。移除它并使用默认值。 notifyAppReady() 应用程序在每次更新后都会回滚。

函数未被调用,或者在错误发生时被调用。检查设备上的控制台并确认每次启动时都有调用。 iOS 构建失败后,平台升级。 Cordova iOS 7+ 需要当前的 Xcode。App Store 上传需要 Xcode 26。您可以使用. 一旦您切换到 Capacitor 。一旦您迁移到 Capgo, 可以在云端生成签名的iOS构建,且无需本地Mac。

更新在Android上工作,但在iOS上不工作。 检查iOS方案在 config.xml 是默认 app 方案 localhost 主机名。

是否应切换到Capacitor?

您不必这样做。Capgo为Cordova提供了一个替代方案,因此您可以继续部署产品,同时决定是否切换。Capacitor带来了一个维护的原生层、Swift Package Manager在iOS上以及一个更大的插件生态系统。当您准备好时,可以保留相同的Capgo应用ID和频道,仅需切换客户端插件。我们的 从Cordova到Capacitor的迁移指南 详细介绍了迁移过程。

Capacitor应用的实时更新

当web层bug处于实时状态时,通过Capgo将修复推送到应用,而不是等待几天的应用商店审批。用户在后台接收更新,而原生代码仍在正常审批路径中。

来自 Martin 的人性化支持

立即开始

最新博客

Capgo 为您提供创建真正专业的移动应用所需的最佳见解