Cordova 代码热更新 - 简书

本文介绍了Cordova应用如何实现代码热更新,包括使用Cordova Hot Code Push (CHCP) 插件的配置和原理,以及App Store的兼容性。详细讲解了配置文件、更新流程、插件接口和错误处理,提供了手动更新的示例。
摘要由CSDN通过智能技术生成
原文: Cordova 代码热更新 - 简书

Cordova 代码热更新

[图片上传失败...(image-a19be7-1521624289049)]

基于 Cordova 框架能将网页应用 (js, html, css, 图片等) 打包成 App。当 App 在应用商店上架后,如何快速更新是我们需要考虑的问题。?

  • 本地打包新版本 App 发布到应用商店,但这中发布流程耗费时间,尤其是 Apple Store
  • 应用加载网络资源,这样 App 展示的内容就可以保证是最新的,但当应用断网时,应用就无法正常使用

我们能想的这两种方式都存在的很大的弊端,不适合实际应用!

插件 Cordova Hot Code Push (CHCP)

插件 Cordova Hot Code Push 正是针对 Cordava 应用如何快速更新问题而提供的解决方案,可以自动更新 web 相关的静态文件。

该插件提供了详细的 wiki 文档,请参考:wiki 文档

App Store 支持么

近日,苹果App Store审核团队向一些开发者下最后通牒:2017年6月12日之前移除所有热更新相关代码、框架或SDK,并重新提交版本。如果不作调整,App可能会从App Store下架。

苹果应用商店已经禁止使用类似 JSPatch 等热修复的框架或者SDK,那么这个插件提供的代码热更新功能是否违法这一规定呢? ?
? 答案是否定的!此插件提供的代码热更新是 web 静态文件,苹果是允许这一做法的。但有两点值得注意:

  • ① 不能明显告知用户有新版本可用,询问用户是否需要更新到最新代码。这一做法会使用户产生困惑,这种更新方式和通过 App Store 更新有何区别。所以正确的做法是,在应用启动的时候,下载和安装热更新代码;或者在某个时机下载热更新代码,在应用下次打开时进行安装
  • ② 如果通过此插件进行代码热更新后,应用功能发生巨大变化,譬如原来是一个计算器应用,代码热更新后,变成了一个音乐播放器,这种欺骗用户的做法也是会被苹果拒绝的

添加插件到项目中

1、下载插件
要求 Cordova 版本 5.0+

cordova plugin add cordova-hot-code-push-plugin --save

2、下载插件的命令行工具 cordova-hot-code-push-cli

npm install -g cordova-hot-code-push-cli

该命令行工具可帮助我们自动生成配置文件 chcp.jsonchcp.manifest,同时还提供了一些其他功能,详细可参考其 README。

3、下载插件后,执行 cordova platform add ios 时可能会遇到如下报错:

Error: Cannot find module 'xml2js/lib/processors'

参考 xml2js is not installed 解决方法很简单:npm install xml2js

热更新相关配置

Cordova Hot Code Push 下载安装到项目中后,需要对其进行相关的配置才能让其工作。

插件配置

Cordova Hot Code Push 热更新插件需要两个配置文件:

  • Application config:chcp.json 包含发布相关信息:热更新代码版本号,应用 native side 版本号等等
  • Content manifest:chcp.manifest 包含项目热更新代码(静态)文件信息:文件名和文件哈希值

这两个配置文件对于插件的运行缺一不可,前者描述了热更新代码的版本信息,后者提供了热更新代码文件的变更信息。借助 cordova-hot-code-push-cli 这个命令行工具可以辅助我们创建这两个配置文件。

Application config

Application config holds information about the current release of the web project.

chcp.json 置于 www 目录根目录,例子如下:

{

  "name": "wps-*****",

  "content_url": "https://kss.ksyun.com/*****/*****/",

  "ios_identifier": "326CN*****",

  "android_identifier": "com.**********.*****.*****.*****.*****",

  "update": "resume",

  "release": "2017.06.07-16.30.20",

  "min_native_interface": 1

}

1、配置项
name 项目名称
content_url web 项目文件在服务器上的存储路径(即 www 目录在云存储中的目录路径),热更新插件将此 URL 作为 base url,用于下载配置文件和项目更新文件(必需的配置项)
release 描述 web 项目版本号,每一次发布的版本号必须唯一(默认使用时间戳,格式为:yyyy.MM.dd-HH.mm.ss),插件是将版本号进行字符串相等比较来判断是否存在新版本(必需的配置项)
min_native_interface

Minimum version of the native side that is required to run this web content

  • cordova 项目主要包含两部分:web content 和 native side。前者是网页内容,后者是 cordova 插件,为网页提供原生 API 支持,web content 的运行是基于 native side。
  • 该配置项指明 web content 运行时 native side 的最低版本。在 native side 代码有变更后(cordova 插件新增/删除,native side 版本号更新),为了确保 web content 能正常运行,需要更新 min_native_interface 的值

在应用 config.xml 配置中可以定义了 native side 的版本号,例如

<chcp>

    <native-interface version="5" />

</chcp>

例如当前项目 native side 的版本号是5:

  • 如果服务器上配置文件 chcp.json 中的 min_native_interface 值为 5,那么符合要求,热更新后的 web content 能够在正常运行
  • 如果服务器上配置文件 chcp.json 中的 min_native_interface 值为 10,高于 config.xml文件中 <native-interface />,那么热更新将无法正常进行。此时,插件会提示错误 chcp_updateLoadFailed,提示应用需要更新升级

update 何时触发进

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值