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

广告:宝塔Linux面板高效运维的服务器管理软件 点击【 https://www.bt.cn/p/uNLv1L 】立即购买

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

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/35667plus.screen.lockOrientation('portrait-primary'); //竖屏正方向锁定            //获取是否热更新过const updated = uni.getStorageSync('updated'); // 尝试读取storageif (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更新包的下载地址)判断文件名中是否含有.wgtif (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在线升级和热更新实现的详细内容,更多请关注9543建站博客其它相关文章!

广告:SSL证书一年128.66元起,点击购买~~~

9543建站博客
一个专注于网站开发、微信开发的技术类纯净博客。
作者头像
admin创始人

肥猫,知名SEO博客站长,14年SEO经验。

上一篇:jquery怎么实现全选效果
下一篇:vue3中怎么使用props和emits并指定其类型与默认值

发表评论

关闭广告
关闭广告