欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

uniapp热更新(wgt)

程序员文章站 2022-03-11 18:53:58
uniapp分两种更新机制:一、整包更新(这种方式比较繁琐,即每次更新之后就要打云包,更新整包,用户体验也不好)二、资源包更新,即wgt(因第一种方法想到利用资源更新,用户体验大大提升,用户更新之后无需跳转到应用市场或者浏览器去重新更包,俗一点就是无感更新)wgt热更新的注意点一、必须要获取appid二、配置需要的版本名称和版本号三、判断平台,区分安卓ios获取相对应的下载连接(第一次整包需要,之后全部是wgt资源包的下载地址)四、在本地打包时和热更新时,App版本和wgt....

uniapp分两种更新机制:

一、整包更新(这种方式比较繁琐,即每次更新之后就要打云包,更新整包,用户体验也不好)

二、资源包更新,即wgt(因第一种方法想到利用资源更新,用户体验大大提升,用户更新之后无需跳转到应用市场或者浏览器去重新更包,俗一点就是无感更新)

 

wgt热更新的注意点

一、必须要获取appid

二、配置需要的版本名称和版本号

三、判断平台,区分安卓ios获取相对应的下载连接(第一次整包需要,之后全部是wgt资源包的下载地址)

四、在本地打包时和热更新时,App版本和wgt应用资源版本将不再保持一致。此时通过plus.runtime.version可获取App版本,通过plus.runtime.getProperty获取wgt资源版本。

五、versionName在云打包App和生成wgt应用资源时会使用。如需升级App版本,先修改此处再云打包。导出wgt资源用于离线打包和热更新时也会以此版本为依据。

下面附上代码

import Vue from 'vue'
import Vuex from 'vuex'
import http from '@/static/js/http.js'
Vue.use(Vuex)
const store = new Vuex.Store({
	state: {
		downloadTask: '',
		device: '', //设备环境
		progress: {}, //下载进度
	},
	mutations: {
		downloadAPP(state, data) {
			var wgtUrl = data.android_link;
			//判断安卓ios,判断是否第一次更包,整包更新还是资源包更新,只做ios?安卓也可以,统一一个方法,如果要做安卓,在这里做判断条件即可
			// var wgtUrl = 'http://godee.cdn.dtbctech.com/_UNI_6FC15A3.wgt'
			if (state.device == 'ios') {
				console.log('ios')
				if (!wgtUrl) {
					wgtUrl = data.ios_link;
				}
			}
			plus.nativeUI.showWaiting("下载更新文件...");
			state.downloadTask = uni.downloadFile({
				url: wgtUrl,
				success: (res) => {
					if (res.statusCode === 200) {
						store.commit('installWgt', res.tempFilePath); //安装wgt包
					}
				},
				fail: (res) => {
					plus.nativeUI.alert("下载失败!");
				}
			});
			state.downloadTask.onProgressUpdate((res) => {
				if (state.progress.progress < res.progress) {
					state.progress = res
				}
			});
		},
		installWgt(state, path) {
			plus.nativeUI.showWaiting("安装更新文件...");
			plus.runtime.install(path, {}, function() {
				plus.nativeUI.closeWaiting();
				plus.nativeUI.alert("应用资源更新完成!", function() {
					plus.runtime.restart();
				});
			}, function(e) {
				plus.nativeUI.closeWaiting();
				plus.nativeUI.alert("安装更新文件失败[" + e.code + "]:" + e.message);
				if (e.code == 10) {
					alert('请清除临时目录');
				}
			});
		},
	},
	actions: {
		updateApp({
			commit,
			state
		}, is_force) {
			// is_force在点击事件的时候传,0或1,分辨是否弹出提示信息
			// let the_date = new Date().toDateString();//利用时间戳更新缓存,看实际项目需要
			// console.log('时间',the_date)
			let device = uni.getSystemInfoSync().platform; //判断设备
			let json_path = '';
			if (device.toLowerCase() == 'android') {
				console.log('安卓?')
				json_path = 'android'
			} else {
				console.log('ios?')
				json_path = 'ios'
				// return;//如果不需要上ios
			}
			state.device = json_path;
			plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) {
				uni.request({
					url: '', //检查更新的服务器地址
					data: {
						// appid: plus.runtime.appid,
						// version: plus.runtime.version,
						// imei: plus.device.imei
						//这里只要是针对大后台,多个app管理配置传参
					},
					success: (result) => {
						var data = result.data.data;
						let cur_v = '1';
						let pass_v = '0';
						try {
							cur_v = parseInt(data.version_ios.split('.').join('')); //转换为number类型进行比较,后台返回的最新版本号
							if (isNaN(cur_v)) {
								cur_v = 1;
							}
							pass_v = parseInt(widgetInfo.version.split('.').join('')); //app本地版本号
							if (isNaN(pass_v)) {
								pass_v = 0;
							}
						} catch (e) {}
						if (cur_v > pass_v && data.ios_link) {
							uni.showModal({
								title: '更新提示',
								content: data.msg || '检测到有数据包更新,是否进行更新?', //可后台配置更新文字返回显示:data.msg
								confirmText: '立即进行',
								success: function(res) {
									if (res.confirm) {
										commit('downloadAPP', data)
									} else if (res.cancel) {}
								}
							});

						} else {
							if (is_force) {
								uni.showToast({
									title: '当前已是最新版本',
									icon: 'none'
								})
							}
						}
					},
					fail(e) {
						console.error(e);
						if (e) {
							uni.showToast({
								title: '更新失败,请联系客服!',
								icon: 'none',
							})
						}
					}
				});

			});
		},
	}
})
export default store

 

本文地址:https://blog.csdn.net/qq_37049128/article/details/107952382