HBuilder实现App资源在线升级更新
本文只要介绍HBuilder实现App资源在线升级更新。
梳理思路:
1.获取线上App版本号和当前App版本号
2.比对版本号,判断是否资源在线升级更新
3.是否下载最新安装包[可以静默下载或用户触发]
4.是否执行资源在线升级更新[可以主动或用户触发]
5.是否立即重启生效[可以主动或用户触发]
关键代码:
由于HBuilder开发的App版本,为了方便大家直接使用,下列代码plus.nativeUI.未做封装。使用的时候可以根据自己的习惯自行整理。
//通过接口请求,获取线上的版本号
var checkUrl= "2.0.0" //通过接口请求,获取线上的版本号。此处默认2.0.0
// 获取当前版本号
function checkUpdate(){plus.runtime.getProperty(plus.runtime.appid,function(inf){wgtVer=inf.version;console.log("当前应用版本:"+wgtVer);if(compareVersion(wgtVer, checkUrl)){ // 判断当前版本是否需要更新plus.nativeUI.confirm('发现新版本'+checkUrl+'是否下载', function(e){ // 此方法请在plusReady()完成后if(e.index>0){plus.nativeUI.toast('升级包下载中...');downWgt(); // 下载升级包}}, 'HelloH5', ['取消','确定']);}});}//版本比较
function compareVersion( ov, nv ){ // ov为本地历史版本,nv为当前线上版本console.log(ov, nv)if ( !ov || !nv || ov=="" || nv=="" ){return false;}var b=false,ova = ov.split(".",4),nva = nv.split(".",4);for ( var i=0; i<ova.length&&i<nva.length; i++ ) {var so=ova[i],no=parseInt(so),sn=nva[i],nn=parseInt(sn);if ( nn>no || sn.length>so.length ) {return true;} else if ( nn<no ) {return false;}}if ( nva.length>ova.length && 0==nv.indexOf(ov) ) {return true;}
}
// 下载wgt文件
var wgtUrl="http://www.vitian.vip/upload/H5D6C9AEA.wgt"; // 线上版本在线更新的.wgt文件路径
function downWgt(){
// plus.nativeUI.showWaiting("下载wgt文件...");plus.downloader.createDownload( wgtUrl, {filename:"_doc/update/"}, function(d,status){if ( status == 200 ) { console.log("下载wgt成功:"+d.filename);plus.nativeUI.confirm('升级包下载完成,是否安装最新版本?', function(e){if(e.index>0){installWgt(d.filename); // 安装wgt包}}, 'HelloH5', ['取消','确定']);} else {console.log("下载wgt失败!");
// plus.nativeUI.alert("下载wgt失败!");}
// plus.nativeUI.closeWaiting();}).start();
}
// 更新应用资源
function installWgt(path){console.log(path)plus.nativeUI.showWaiting("安装升级文件...");plus.runtime.install(path,{},function(){plus.nativeUI.closeWaiting();console.log("安装wgt文件成功!");// 是否立即重启plus.nativeUI.confirm('应用资源更新完成,是否立即重启生效?', function(e){if(e.index>0){plus.runtime.restart();}}, 'HelloH5', ['取消','确定']);
// plus.nativeUI.alert("应用资源更新完成!",function(){
//
//
// });},function(e){plus.nativeUI.closeWaiting();console.log("安装wgt文件失败["+e.code+"]:"+e.message);plus.nativeUI.toast("安装wgt文件失败["+e.code+"]:"+e.message);});
}
// 用户主动除非检测版本更新
function isCheckUpdate(){plus.runtime.getProperty(plus.runtime.appid,function(inf){wgtVer=inf.version;console.log("当前应用版本:"+wgtVer);console.log(compareVersion(wgtVer, checkUrl))if(compareVersion(wgtVer, checkUrl)){plus.nativeUI.confirm('发现新版本'+wgtVer+'是否下载', function(e){if(e.index>0){plus.nativeUI.toast('升级包下载中...');downWgt(); // 下载升级包}}, 'HelloH5', ['取消','确定']);} else {
// plus.nativeUI.alert("当前应用版本为最新版本");plus.nativeUI.toast('当前应用版本为最新版本');}});
}
注:App资源在线更新,如果只是改过目录结构,如js、css、html页面,属于同名文件覆盖,所以非同名文件是会被保留在本机的。如果改变manifest.json的文件内容,是需要整包升级的。
DEMO下载路径为:https://download.csdn.net/download/qq_38209578/10908123
HBuilder实现App资源在线升级更新相关推荐
- 软件包管理 之 软件在线升级更新yum 图形工具介绍
作者:北南南北 来自:LinuxSir.Org 提要:yum 是Fedora/Redhat 软件包管理工具,包括文本命令行模式和图形模式:图形模式的yum也是基于文本模式的:目前yum图形前端程序主要 ...
- electron在线升级更新的两种方式(整体更新和部分更新)及我是如何实现electron在线升级热更新功能的?(企业级项目已上线)
这篇主要以讲解部分资源在线热更新的实现为核心,electron自带的整体更新的实现较简单,简单说一下即可,如有疑问点的可以自行查阅相关资料或在下面留言给我即可 一.electron的在线升级更新方式都 ...
- 跨平台应用开发进阶(三): uni-app 实现资源在线升级/热更新
文章目录 一.前言 1.1 Android升级检测机制 二.wgt 资源升级包升级 2.1 修改版本号 2.2 发行 2.3 安装资源升级包 2.3.1 代码示例 2.3.2 小结 三.整包升级 3. ...
- C#单exe程序在线升级更新
有一个小工具,除了配置文件就只有一个exe主程序,以前弄别的工具有引用一些dll,还做了更新器,这个小工具不想弄太复杂,希望保持单exe又具有在线升级的功能,网上看到有人问过同样问题,写下我的方法以作 ...
- Android app 内部在线升级
app在线更新是一个比较常见需求,新版本发布时,进入app,会弹出更新提示框,第一时间更新新版本app.在线更新分为以下几个步骤: 1.请求api 2.检查版本 3.下载最新版本apk 4.安装apk ...
- 解决macOS无法在线升级更新的问题
macOS在线更新功能本来十分方便,但是本人macbook pro自从10.14.x开始(包括Catalina 10.15.x)就无法直接更新.开始时提示.下载.运行更新程序.自动重启安装... 一切 ...
- C#实现程序的版本在线升级更新
文章目录 背景 代码 下载地址 设置到的知识点 参考文献 背景 最近在做开发的时候,需要程序有自动版本升级的功能.特此记录下整个过程. 代码 注意事项: 服务器端需要上传XML配置文件和待下载的软件 ...
- Fedora/Redhat 在线安装更新软件包,yum 篇 ── 给新手指南 (转载)
源地址:http://fedora.linuxsir.org/main/?q=node/31 ==================================================== ...
- Android 项目必备(二十九)-->App 在线升级与更新
文章目录 前言 实战 前言 1. 用户使用 App 的时候升级提醒有两种方式获得: 通过应用市场获取: 打开应用之后提醒用户更新升级. 2. 更新操作一般是在用户点击了升级按钮之后开始执行的,这里的升 ...
最新文章
- Python 包管理工具解惑
- QML实现酷炫的 Cover Flow 效果(PathView)
- linux文件内容添加序号,nl命令将指定的各个文件添加行号编号序号标注后写到标准输出...
- eclipse egit 报错 The current branch is not configured for pull No value for key branch.master
- 线上环境部署MongoDB的官方建议
- 计算机网断IP修改,修改计算机名、IP
- Java工作笔记-使用CXF接入及创建WebService
- ajax mysql登录我注册_ajax方式实现注册功能(提交数据到后台数据库完成交互)
- 不越狱 继续逆向 微信运动
- C-snowflake uuid 生成器
- 行业知识图谱调查报告(二):知识图谱构建及行业知识图谱构建举例
- ansys部分边界条件详解
- php自测试卷2,PHP试题网
- 【JZOJ4939】平均值 题解
- 6、T5L DGUS ll 应用开发指南摘录(一)
- 重写hashcode方法需要重写equals方法吗?为什么?
- 程序员深思语,导师语录
- vue中实现动画效果--三种方式
- 国家自然科学基金 计算机视觉,【科研新成果】我院2019年国家自然科学基金项目取得新突破...
- 线程调度策略SCHED_RR(轮转法)和SCHED_FIFO(先进先出)之对比