cordova hot load - eju-front/mobile-solution GitHub Wiki

Cordova 热更新

目标

动态更新应用 www 目录下的 H5 相关本地资源

搭建 CodePush 环境

安装 CodePush 命令行工具

npm install -g code-push-cli

创建 CodePush 账号

code-push register

登录 CodePush 账号

code-push login

添加插件

创建应用

code-push app add <appName>

创建完成后命令行会显示 ProductionStaging 两个 Deployment Key,通常前者用于产品环境,后者用于测试环境

添加 CodePush 插件

在工程目录下执行以下命令

cordova plugin add cordova-plugin-code-push@latest

然后修改 config.xml,填入以下内容,并在对应处修改为创建应用时获得的 Deployment Key

<platform name="android">
    <preference name="CodePushDeploymentKey" value="YOUR-ANDROID-DEPLOYMENT-KEY" />
</platform>
<platform name="ios">
    <preference name="CodePushDeploymentKey" value="YOUR-IOS-DEPLOYMENT-KEY" />
</platform>

如果 config.xml 中允许访问的域名设置不是 <access origin="*" /> ,则需要按照以下方式添加白名单

<access origin="https://codepush.azurewebsites.net" />
<access origin="https://codepush.blob.core.windows.net" />
<access origin="https://codepushupdates.azureedge.net" />

接着在页面头部添加以下元素

<meta http-equiv="Content-Security-Policy" content="default-src https://codepush.azurewebsites.net 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *" />

最后确认 cordova-plugin-whitelist 插件是否已经安装完成。

使用方法

添加检查更新功能

在应用需要进行检查更新的地方添加以下代码,一般在 deviceready 事件时执行

codePush.sync();

如果需要检测次数更频繁,可以按照以下代码在每次应用进入前台时检测

document.addEventListener("resume", function () {
    codePush.sync();
});

通常 CodePush 检测到新版本后会下载新版本到本地并在下次启动后进行安装,对于强制更新的内容则会立即进行安装

如果需要定制弹出的对话框等个性化信息,可以查看 官方 API

Release 新版本

执行以下命令进行 Release,CodePush 会自行管理每次 Release 的版本号

code-push release-cordova <appName> <platform> [-m] [--description <desc>] [-x]
  • -m 强制更新,默认更新会在应用下次启动时安装,强制更新则会弹出提示对话框
  • --description更新内容的描述

除了以上基本命令,CodePush 还支持 A/B 测试

code-push release-cordova <appName> <platform> --rollout <percent>
  • --rollout 表示更新的群体所占比例,如 25%

CodePush 命令列表

查看所有应用

code-push app ls

添加项目合作者,合作者需要已经注册了 CodePush

code-push collaborator add <appName> <collaboratorEmail>

查看部署历史记录

code-push deployment ls <appName> [-k]
  • -k 同时显示 deployment key

参考资料

⚠️ **GitHub.com Fallback** ⚠️