您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

介绍 uni-app在线升级和热更新实现

2025/6/28 2:13:18发布22次查看
uniapp开发教程栏目分析app升级的业务
推荐(免费):uniapp开发教程
第一、分析app升级的业务
1、每次打开app需要在全局app.vue中去检测请求后台接口
2、对比版本号校验是否升级 
3、识别是热更新还是在线升级,处理不同业务,热更新下载包使用官方api升级(按照实际接口返回字段判断)
4、识别是强制升级还是非强制升级 弹框提醒用户
5、识别是ios还是android升级 用户点击跳转升级
第二、编写代码
1、进入app.vue  onlaunch下
2、按照业务分析编写升级代码
//#ifdef app-plus // app检测更新 具体打包流程可以参考:https://ask.dcloud.net.cn/article/35667 plus.screen.lockorientation('portrait-primary'); //竖屏正方向锁定 //获取是否热更新过 const updated = uni.getstoragesync('updated'); // 尝试读取storage if (updated.completed === true) { // 如果上次刚更新过 // 删除安装包及安装记录 console.log('安装记录被删除,更新成功'); uni.removesavedfile({ filepath: updated.packgepath, success: res => { uni.removestoragesync('updated'); } }); } else if (updated.completed === false) { uni.removestoragesync('updated'); plus.runtime.install(updated.packgepath, { force: true }); uni.setstorage({ key: 'updated', data: { completed: true, packgepath: updated.packgepath }, success: res => { console.log('成功安装上次的更新,应用需要重启才能继续完成'); } }); uni.showmodal({ title: '提示', content: '应用将重启以完成更新', showcancel: false, complete: () => { plus.runtime.restart(); } }); } else { //获取当前系统版本信息 plus.runtime.getproperty(plus.runtime.appid, widgetinfo => { //请求后台接口 解析数据 对比版本 this.$request.gett('/appinfo/').then(res => { res = res.data[0]; if (res.wgturl && widgetinfo.version < res.version) { let downloadlink = ''; let androidlink = res.androidwgturl; let ioslink = res.ioswgturl; let ready = false; //校验是是不是热更新 if (res.wgturl.match(regexp(/.wgt/))) { // 判断系统类型 if (plus.os.name.tolowercase() === 'android') { console.log('安卓系统'); if (androidlink && androidlink !== '#') { // 我这里默认#也是没有地址,请根据业务自行修改 console.log('发现下载地址'); // 安卓:创建下载任务 if (androidlink.match(regexp(/.wgt/))) { console.log('确认wgt热更新包'); downloadlink = androidlink; ready = true; } else { console.log('安卓推荐.wgt强制更新,.apk的强制更新请您自行修改程序'); } } else { console.log('下载地址是空的,无法继续'); } } else { console.log('苹果系统'); if (ioslink && ioslink !== '#') { // 我这里默认#也是没有地址,请根据业务自行修改 console.log('发现下载地址'); // 苹果(a):进行热更新(如果ioslink是wgt更新包的下载地址)判断文件名中是否含有.wgt if (ioslink.match(regexp(/.wgt/))) { console.log('确认wgt热更新包'); downloadlink = ioslink; ready = true; } else { console.log('苹果只支持.wgt强制更新'); } } else { console.log('下载地址是空的,无法继续'); } } if (ready) { console.log('任务开始'); let downloadtask = uni.downloadfile({ url: downloadlink, success: res => { if (res.statuscode === 200) { // 保存下载的安装包 console.log('保存安装包'); uni.savefile({ tempfilepath: res.tempfilepath, success: res => { const packgepath = res.savedfilepath; // 保存更新记录到stroage,下次启动app时安装更新 uni.setstorage({ key: 'updated', data: { completed: false, packgepath: packgepath }, success: () => { console.log('成功保存记录'); } }); // 任务完成,关闭下载任务 console.log('任务完成,关闭下载任务,下一次启动应用时将安装更新'); downloadtask.abort(); downloadtask = null; } }); } } }); } else { console.log('下载地址未准备,无法开启下载任务'); } } else { //不是热更新是在线更新 校验是否强制升级 if (res.method == 'true') { uni.showmodal({ showcancel: false, confirmtext: '立即更新', title: '发现新版本', content: res.des, success: res => { if (res.confirm) { this.$queue.showloading('下载中...'); if (uni.getsysteminfosync().platform == 'android') { uni.downloadfile({ url: androidlink, success: downloadresult => { if (downloadresult.statuscode === 200) { plus.runtime.install( downloadresult.tempfilepath, { force: false }, d => { console.log('install success...'); plus.runtime.restart(); }, e => { console.error('install fail...'); } ); } } }); } if (uni.getsysteminfosync().platform == 'ios') { plus.runtime.openurl(ioslink, function(res) {}); } } else if (res.cancel) { console.log('取消'); } } }); } else { uni.showmodal({ title: '发现新版本', confirmtext: '立即更新', canceltext: '下次更新', content: res.des, success: res => { if (res.confirm) { this.$queue.showloading('下载中...'); if (uni.getsysteminfosync().platform == 'android') { uni.downloadfile({ url: androidlink, success: downloadresult => { if (downloadresult.statuscode === 200) { plus.runtime.install( downloadresult.tempfilepath, { force: false }, d => { console.log('install success...'); plus.runtime.restart(); }, e => { console.error('install fail...'); } ); } } }); } if (uni.getsysteminfosync().platform == 'ios') { plus.runtime.openurl(ioslink, function(res) {}); } } else if (res.cancel) { console.log('取消'); } } }); } } } }); }); } //#endif
以上就是介绍 uni-app在线升级和热更新实现的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product