您现在的位置是:网站首页>软件开发>开发终端>uni-appuni-app
软件版本更新的一些梳理
风口下的猪2022-04-27【uni-app】
简介
软件版本更新,主要是为了在生产环境中,实现对软件的迭代升级,不断优化。
一.软件版本号
一般软件版本号是三段式,0.0.0 (X.Y.Z)
第一位表示主版本号(Major),当 APP的兼容性变化时,X 需递增。
第二位表示次版本号(Minor),当增加功能时(不影响 APP的兼容性),Y 需递增。
第三位表示修订号(Patch),当做 Bug 修复时(不影响 APP的兼容性),Z 需递增
实际项目中最后对每次版本更新的内容、版本号做个记录
二.冷更新和热更新
1.冷更新
(a)冷更新一般是主版本更新,软件改动很多,对软件权限/系统支持/配置/兼容等参数进行了一些修改,此时就需要冷更新;
(b)冷更新是下载新的apk按照包,执行安装;
2.热更新
(a)热更新则主要是功能增加、bug修复等;
(b)热更新是下载wgt补丁,进行补充修改
三.更新流程
更新流程主要包含新老版本检测对比提示更新、客户确定更新后执行下载apk或wgt、下载完成后执行安装、安装完成后重启
1.新老版本检测对比提示更新
(a)新版本数据包含 最新版本号、apk/wgt下载地址、新版本更新内容说明 这三个要素;
(b)新版本数据通过网络接口获取,实际项目中,每个软件实例在开启进程时便要对比新老版本号,即新版本数据读取的接口很频繁。建议采用redis;
(c)老版本数据通过本地读取,读取软件系统信息从而获得版本号;
(d)一般软件项目首页通过模态框显示是否需要软件版本更新
2.分型执行下载
(a)如有更新,模态框提示有更新。但执行更新需要用户点击(小技巧:不给模态框设计关闭交互,用户只能执行更新);
(b)如果新老版本是主版本差异,则将用户引导到apk下载地址进行下载安装;
(c)如果是热更新,则强制下载wgt,下载过程中监听进度,并将进度显示给用户;
(d)下载完成后提示下载完毕
3.下载完成后执行安装
(a)提示下载完毕后一秒钟的timeout,执行安装;
(b)wgt一般不大,所以安装过程中不用监听进度。只需改变文本为“下载完毕,正在安装中...”即可;
4.安装完成后重启
(a)安装完成后给一个500ms的安装成功提醒显示,然后timeout执行重启
四.例子
/*获取版本*/
getVersion(){
var that=this;
this.$safe('system.getVersionNew',{},'cid','channel').then((res)=>{
if(res.statusCode==200){
that.varsionData=res.data;
plus.runtime.getProperty(plus.runtime.appid,(info)=>{
var currentVersions=info.version.split('.');
var resultVersions=res.data.version_num.split('.');
if(currentVersions[0]<resultVersions[0]){
that.show=true;
}else{
if(currentVersions[1]!=resultVersions[1]||currentVersions[2]!=resultVersions[2]){
that.show=true;
}
}
});
}
});
},
/*版本更新*/
update(){
var that=this;
if(this.varsionData){
plus.runtime.getProperty(plus.runtime.appid,(info)=>{
var currentVersions=info.version.split('.');
var resultVersions=that.varsionData.version_num.split('.');
if(currentVersions[0]<resultVersions[0]){
//大版本冷更新apk
if(plus.os.name=='Android'){
plus.runtime.openURL(that.varsionData.path);
}
}else{
//小版本热更新wgt包
if(currentVersions[1]!=resultVersions[1]||currentVersions[2]!=resultVersions[2]){
var dtask=plus.downloader.createDownload(that.varsionData.path,{method:"GET"},(d,status)=>{
if(status==200){
that.loadOver=true;
that.title="下载完成";
that.notice="准备完成,等待安装...";
plus.runtime.install(d.filename,{force:true},()=>{
that.title="安装完成";
that.notice="安装完成,准备重启...";
setTimeout(() => {
that.installOver=true;
plus.runtime.restart();
},1000);
}
,(e)=>{
uni.showToast({
icon:"error",
title:"安装失败"
});
setTimeout(() => {
that.show=false;
},1000);
});
}else{
uni.showToast({
icon:"error",
title:"下载失败"
});
setTimeout(() => {
that.show=false;
},1000);
}
});
// 下载任务状态变化事件,计算进度条数值
dtask.addEventListener('statechanged',(task)=>{
if(task.state==3){
let progress=dtask.downloadedSize/dtask.totalSize*100;
that.progress=Math.trunc(progress);
}
});
dtask.start();
}
}
});
}
}
很赞哦! (0)
相关阅读 (同一栏目)
- uni-app发行(打包)h5,访问为白屏
- v-for使用报错:Cannot use v-for on stateful component root element because it renders multiple elements.
- 组件中不通过$emit改父组件数据,报错
- $emit传递多个参数
- 通过html5+扩展titleNView定义autoBackButton,autoBackButton在h5失效的问题
- 交互反馈uni.showModel()中success用箭头函数的问题
- 页面首次加载时,popup弹出层失效问题
- 使用uni-nav-bar左右两个图标宽度不同的问题
- 自定义组件uni-nav-bar插槽问题
- 解决 img mode="widthFix" 高度闪烁问题
- 多层使用组件,每层都要注册的问题
- scroll-view上拉加载失效问题
- Hbuilder智能感知引入同目录组件,路径出错问题
- swiper轮播图片右侧空白问题
- 可拖拽顶部tab组件,设置padding时,只需在下部uni-tab-bar中scroll-view里的view
- 渐变透明的导航栏设计
- watch数据监听
- 微信小程序swiper-item设置style引起图片不显示问题(ios端)
- uni-app开发微信小程序时page.json如何设置每个页面的Style(状态栏、导航条、标题、窗口背景色等)
- uniapp运行到app端出现空白的问题
- uni-app路由跳转及参数的传参和接收
- 在获取异步函数(uniapp中的uni.request等)返回结果,用renturn报undefined
- ios时间格式为2020-02-02使用new Data()转化为时间戳的问题
- better-scroll使用时报错
- better-scroll在项目中涉及到v-if控制显示切换时,滑动失效
- uni-app导航栏和状态栏配置
- APP端js类方法及属性间相互调用,this的指向问题
- uniapp app端调试
- uniapp 页面栈管理
- uni-app规范开发(1)设置配置文件
- uniapp规范开发(2)封装请求接口
- uniapp规范开发(3)命名规范
- uniapp规范开发(4)结构化规范
- uniapp规范开发(5)注释规范
- uniapp规范开发(8)使用过滤器filter
- uniapp规范开发(6)编码规范
- uniapp规范开发(7)指令规范
- uni-app规范开发(10)Vue 单文件组件 (SFC) 规范
- uni-app规范开发(9)使用公共组件利用slot
- vue挂载全局方法和组件(uni-app中)
- bscroll左右联动
- uni-app规范开发(11)加载数据后渲染
- HbuilderX运行npm
- [BScroll warn]: Can not resolve the wrapper DOM. Vue better-scroll
- 含bscroll页面重复渲染引起页面中点击事件执行多次
- bscroll购物车面板打开关闭后,bacroll不再可滑动的解决方案
- [BScroll warn]: Can not resolve the wrapper DOM. Vue better-scroll
- renderjs的概述及作用
- renderjs模式下,视图层与逻辑层的通信及调用
- renderjs模块获取逻辑层的数据
- 子组件需要自有数据时,不要用data申明数据+方法里用this定义数据
- QQ小程序打开指定QQ群
- eqqwe
- 前端使用uni.uploadFile发生表单数据时,后端通过$_POST/param()等方法都获取不到
- render模块下,视图层js(render.js)调用逻辑层js
- Uniapp 实现 与 外部 HTML 页面通信
- 非页面js使用uni.navigateTo()进行跳转
- 新增和编辑页面中,数据带图片的问题
- 前后端开发时,数组遍历的偏重使用
- uniapp h5页面刷新出现404或者空白的解决方法
- JDK或JRE生成安卓APP证书
- uni-app HBuilder X 云打包:证书文件不是有效地keystore文件
- 软件版本更新的一些梳理
- uniapp wgt安装失败的原因
- plus.install安装失败的解决方案
- 源生组件的z-index问题
- 组件通过qq.createSelectorQuery().select()不能获取到自己板块的id,但是能获取到父主页面的id
- 微信/QQ小程序网络图片-canvas时不显示的问题
- 小程序将网络图片转为base64
- uniapp 安卓端保存base64到相册
栏目目录
标签云
站点信息
- 文章统计:528篇
- 移动端访问:扫码进入SQ3R
