uniapp 개발 튜토리얼 칼럼은 APP 업그레이드 비즈니스를 분석합니다
추천(무료): uniapp 개발 튜토리얼
먼저, APP 업그레이드 비즈니스를 분석합니다
1, 앱을 열 때마다 글로벌 App.vue에서 요청 백엔드 인터페이스를 확인해야 합니다.
2. 버전 번호를 비교하여 업그레이드되었는지 확인합니다.
3. 다양한 비즈니스를 처리하려면 온라인 업그레이드 핫 업데이트 API 업그레이드를 위한 공식 다운로드 패키지를 사용하세요(실제 인터페이스 반환 필드에 따라 판단)
4. 팝업으로 강제 업그레이드인지 비강제 업그레이드인지 확인하세요. 사용자에게 알림 상자
5. 사용자가 클릭하여 업그레이드로 이동합니다
두 번째, 코드를 작성합니다
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
위 내용은 유니앱 온라인 업그레이드 및 핫 업데이트 구현 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!