您现在的位置是:网站首页>软件开发>开发终端>uni-appuni-app

软件版本更新的一些梳理

风口下的猪2022-04-27uni-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)

  • 软件开发
  • 素质要求
  • 计算机基础
  • 架构
  • 安全
  • 性能
  • 运维
  • 尾页
  • 数据库
  • 开发终端
  • 语言基础
  • 项目管理
  • 产品设计
  • 系统
  • 工作规范
  • 计算机网络
  • 前端技术栈
  • 数据结构
  • 计算机组成原理
  • 后端技术栈
  • 性能优化
  • 安全设计
  • 常见模块
  • 计算机操作系统
  • 服务器
  • python
  • MySQL
  • thinkphp
  • PHP
  • Java
  • JavaScript
  • Windows
  • Linux
  • 特效
  • indexedDB
  • vue
  • 淘宝联盟
  • Ionic
  • Angular
  • 微信小程序
  • 支付宝小程序
  • uni-app
  • css/sass/less
  • 支付
  • socket
  • 爬虫
  • web性能优化
  • 消息推送
  • CVM
  • sqlite
  • Redis
  • 前端基础
  • 基础
  • element
  • Nginx
  • yii2
  • /ponder/index.php/index/catelist/catelist/cateid/10.html

    相关阅读 (同一栏目)

    << /

    标签云

    站点信息

    • 文章统计:528篇
    • 移动端访问:扫码进入SQ3R