Introducing the implementation of uni-app online upgrade and hot update
uniapp development tutorial Column analysis business of APP upgrade
##Recommended (free): uniapp development tutorial
First, analyze the business of APP upgrade
1. When opening the APP for the first time, you need to detect the request background interface in the global App.vue 2. Compare the version number to verify whether it is upgraded 3. Identify whether it is a hot update or an online upgrade, and handle different services. The hot update download package uses the official api to upgrade (judged according to the actual interface return field)4. Identify whether it is a forced upgrade or a non-forced upgrade. A pop-up box reminds the user5. Identify whether it is an IOS or Android upgrade. The user clicks to jump to upgradeSecond, write the code
1. Enter APP.vue onLaunch2. Write the upgrade code according to the business analysis//#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
The above is the detailed content of Introducing the implementation of uni-app online upgrade and hot update. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



How to develop uni-app in VSCode? The following article will share with you a tutorial on developing uni-app in VSCode. This may be the best and most detailed tutorial. Come and take a look!

How to use uniapp to develop a simple map navigation? This article will provide you with an idea for making a simple map. I hope it will be helpful to you!

How to use uniapp to develop a snake game? The following article will take you step by step to implement the Snake game in uniapp. I hope it will be helpful to you!

uni-app interface, global method encapsulation 1. Create an api file in the root directory, create api.js, baseUrl.js and http.js files in the api folder 2.baseUrl.js file code exportdefault"https://XXXX .test03.qcw800.com/api/"3.http.js file code exportfunctionhttps(opts,data){lethttpDefaultOpts={url:opts.url,data:data,method:opts.method

This article brings you relevant knowledge about uniapp, which mainly organizes the related issues of implementing the select-all function of the multi-select box. The reason why the select-all function cannot be implemented is that when the checked field of the checkbox is dynamically modified, the status on the interface can Real-time changes, but the change event of checkbox-group cannot be triggered. Let's take a look at it. I hope it will be helpful to everyone.

This article will guide you step by step in developing a uni-app calendar plug-in, and introduce how the next calendar plug-in is developed from development to release. I hope it will be helpful to you!

Exploring the Principle of Golang Hot Update: The Mystery of Dynamic Loading and Reloading Introduction: In the field of software development, programmers often hope to be able to modify and update code without restarting the application. Such requirements are of great significance to both development efficiency and system operation reliability. As a modern programming language, Golang provides developers with many convenient mechanisms to implement hot updates. This article will delve into the principles of Golang hot update, especially the mysteries of dynamic loading and reloading, and will combine it with specific code examples.

How does uniapp implement scroll-view drop-down loading? The following article talks about the drop-down loading of the uniapp WeChat applet scroll-view. I hope it will be helpful to everyone!
