如果您正在寻找 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-webviewremoved)
检查您的平台:
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迁移
- 移除旧插件及其配置。 删除:
cordova-hot-code-push-plugin,chcpsectionconfig.xml, 和cordova-hcpCLI 和chcp.json/chcp.manifest生成 - 移除
cordova-plugin-ionic-webview如果存在,测试应用在默认 Cordova WebView 上运行。 - 升级 Cordova 平台 到 Android 13+ 和 iOS 7+。
- 安装
@capgo/cordova-updater并添加notifyAppReady(). - 发布新商店版本。 旧安装保留旧插件。只有新二进制包含 Capgo 更新器。
- 上传您的第一个捆绑包 到测试频道,检查设备,然后推广到生产。
那些不从商店更新的用户将继续使用旧机制,直到他们这样做。 如果旧的更新服务器仍然有效,请在过渡期间保持它在线,或者接受那些用户在安装新二进制文件之前不会获得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的迁移指南 详细介绍了迁移过程。