iOS程序猿程序员iOS开发技术分享

移动端热更新部署方案

2019-03-28  本文已影响35人  合欢猪

前言

目前采用的热更新方案是微软提供的( cordova-plugin-code-push ),大平台,稳定性等方面更可靠。
本文也主要是通过以下方面进行介绍:

一、环境部署及实现

1、mac端环境准备

全局安装code-push-cli

npm install -g code-push-cli

注:code-push-cli是连接热更新服务端的工具,我们把要更新的代码上传至服务端,客户端(我们的app)安装cordova-plugin-code-push插件来从服务端下载代码.

2、登录热更新服务端

主要流程:

2.1、命令行登录code-push服务器

code-push login 
//扩展
//注销登录
code-push loout

该命令会打开浏览器窗口让我们登录code-push服务端

2.2、登录成功后会获取授权token

此处用github登录,成功后会返回一个授权token,复制此token

2.3、终端输入授权token

token作用是将来与服务端做校验,将获取到的token复制到命令行,回车则登录成功, 至此,code-push服务端算是登录成功了。

//扩展
//列出登录的token
code-push access-key ls
//删除某个token
code-push access-key rm <accessKey>

3、code-push 命令介绍

此处先介绍api,伴随api强调注意事项:

3.1、给app在热更新服务端创建应用

code-push app add <appName> <os> <platform>

eg> code-push app add test-ios ios cordova

注意事项:

注意的是服务端在创建应用的时候会默认为每个应用生成两种部署类型("Production"和"Staging"),这两种类型分别代表生产环境和开发环境,一定要记下该过程中生成的这四个key值,key是用来连接客户端和服务端的,此处以Staging举例:

Staging案例

3.2、删除应用

code-push app rm <appName>

3.3、查看热更新服务端上创建的应用

code-push app list

3.4、发布应用

code-push release-cordova <appName> <platform> [options]

Options参数(常用的几个):

// 1、发布更新
code-push release-cordova test-ios ios --des "描述"
// 2、部署“Production”更新
code-push release-cordova test-ios ios -d "Production" --des  "描述信息"
 // 3、添加强制更新
code-push release-cordova test-ios ios -m 
// 4、指定版本推送
code-push release-cordova test-ios ios --targetBinaryVersion "~1.0.0"

范围规则

 1.2.3 仅仅只有1.2.3的版本
 *所有版本
 1.2.x 主要版本1,次要版本2的任何修补程序版本
 1.2.3 - 1.2.7 1.2.3版本到1.2.7版本
 >=1.2.3 <1.2.7 大于等于1.2.3版本小于1.2.7的版本
 ~1.2.3 大于等于1.2.3版本小于1.3.0的版本
^1.2.3 大于等于1.2.3版本小于2.0.0的版本

注意事项:

3.5、查看部署状态

code-push deployment list <appName>

eg:

 // 查看test-ios部署状态
code-push deployment list test-ios
 //查看test-ios部署状态及key值(忘记key值可以这样找)
code-push deployment list test-ios -k

3.6、清空部署纪录

code-push deployment clear <appName> <deploymentName>

eg:

// 清空test-ios 在Staging状态下的部署纪录
code-push deployment clear test-ios Staging

3.7、添加部署状态

默认只有“Staging”和“Production”两种状态

code-push deployment add <appName> <deploymentName>
//eg>
code-push deployment add test-ios Staging

3.8、删除自定义部署状态

code-push deployment rm <appName> <deploymentName>

3.9、查看历史版本

code-push deployment history <appName> <deploymentName> 查看历史版本

3.10、重命名一个部署

code-push deployment rename <appName> <currentDeploymentName> <newDeploymentName>

3.11、重命名一个已存在app

code-push app rename 重命名一个存在 app

3.12、把app所有权转移到另一账号

code-push app transfer

3.13、修改更新

code-push patch <appName> <deploymentName>  [--label <label>] <options>
//eg:
code-push patch myApp Staging  --label v1 --des "修改更新" -m false -x true

3.14、升级环境

code-push promote <appName> <sourceDeploymentName> <destDeploymentName> <Options>
//eg:
//"MyApp"中"Staging"部署的最新更新发布到"Production"部署中
code-push promote MyApp Staging Production

3.15、回滚更新

//指定回归到哪个标签,默认回滚到上一个
//--targetRelease (-r)
// 不能跨版本回滚
code-push rollback <appName> <deploymentName> [--targetRelease <releaseLabel>]
//eg:
code-push rollback myApp Staging

4、app环境准备

4.1、进入app目录,安装热更新插件及插件依赖

cd "app目录"
cordova plugin add cordova-plugin-code-push

4.2、查看是否安装白名单插件,没有则安装

// 查看命令
cordova plugin list
// 安装命令
cordova plugin add cordova-plugin-whitelist

4.3、配置config.xml环境代码

添加如下配置以允许code-push服务器通讯

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

4.4、配置热更新key

在config.xml中添加deployment key,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>

4.5、配置index.html

在index.html中添加如下代码

<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 *" />

目的也是为了允许code-push服务器通讯

5、code-push api介绍

5.1、询问code-push服务端是否有更新

codePush.checkForUpdate(onSuccess, onError?, deploymentKey?: String);

eg:

codePush.checkForUpdate(function (update) {
    if (!update) {
        console.log("The app is up to date.");
    } else {
        console.log("An update is available! Should we download it?");
    }
});

6、用法

6.1、在app deviceready时直接使用

//一般直接用这个,每次ready后自动获取
codePush.sync();

6.2、如果希望app能够尽快的获取更新信息,则

//这个是每次从后台唤醒都会检查更新
document.addEventListener("resume", function () {
    codePush.sync();
});

6.3、常用三种更新方案

如果有发布热更新时 mandatory 则 Code Push 会根据 mandatory 是 true 或false 来控制应用是否强制更新。默认情况下 mandatory 为 false 即不强制更新。mandatory 为 false时以下三种设置方法才有效
 
// 第一种:
codePush.sync();
 
// 第二种:
codePush.sync({
    updateDialog: false,
    installMode: codePush.InstallMode.IMMEDIATE
});
 
// 第三种:
CodePush.sync({
    deploymentKey: 'deployment-key-here',
    updateDialog: {
        optionalIgnoreButtonLabel: '稍后',
        optionalInstallButtonLabel: '后台更新',
        optionalUpdateMessage: '有新版本了,是否更新?',
        title: '更新提示'
    },
    installMode: CodePush.InstallMode.IMMEDIATE
});
 
三种更新的策略: 配置到installMode: 之后即可生效
* IMMEDIATE 立即更新APP
* ON_NEXT_RESTART 到下一次启动应用时
* ON_NEXT_RESUME 当应用从后台返回时

6.4、其他
官方文档出了不少,好多目前没用到,大家可以看下官方介绍
官方文档

二、注意事项

三、参考文献

gitHub官方文献
code-push常用命令

上一篇下一篇

猜你喜欢

热点阅读