DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录.
  • DmozDir.org
DMOZ目录快速登录入口-免费收录各类优秀网站的中文网站目录.由人工编辑,并提供网站分类目录检索及地区分类目录检索,是站长免费推广网站的有力平台!

uniapp在线升级和热更新实现

  • uniapp在线升级和热更新实现

  • 已被浏览: 52 次2020年12月27日    来源:  https://blog.csdn.net/weixin_39706415/article/details/111665160
  • 第一、分析APP升级的业务 1、每次打开APP需要在全局App.vue中去检测请求后台接口 2、对比版本号校验是否升级? 3、识别是热更新还是在线升级 处理不同业务 热更新下载包使用官方api升级 按照实际接口返回字段判断4、识别是强

    第一、分析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
    小马总 技术控 互联网创业者 微信搜一搜【码兄】关注,关注后点击菜单【学习资料】获取各类技术学习视频资料哦!本人互联网创业者!省钱兄科技CEO!技术控!喜欢撸代码!CSDN记录我的程序人生和创业历程!期待你的关注
    以上信息来源于网络,如有侵权,请联系站长删除。

    TAG:在线升级 Uniapp

  • 上一篇:图像处理算法工程师——1必备技能总结——2面试题大全
  • 与“uniapp在线升级和热更新实现”相关的资讯
  • uniapp+nodejs实现小程序登录流程,获取openID,附uniapp请求封装
  • 使用uniapp开发跨端小程序
  • 基于HBuilderX+UniApp+ColorUi+UniCloud 优宝库 开发实战(一)
  • uniapp 实现App打开另一个App,以微信为例
  • uniapp H5 https跨域请求