uniapp-app更新(去浏览器强制更新,和热更新)

前言

由于我们的(Android)app更新是挂在第三方的,所以每次更新的时候都要去浏览器下载,这样用户体验很不好。这样就萌发了怎样去实现在app内部实现更新而不是重新下载新版本的念头。查阅资料后发现 HBuilderX提供了一个很好的解决方案,就是打包一个wgt包,用下载文件的方式实现app的热更新


一、注意事项:

  1. 打包好的wgt文件包放在自己的服务上。
  2. 如果原来的用户还用的是去浏览器或者商店更新下载的方式的话,在这次版本发布之后必须让用户强制更新(也就是用原来的方法更新一次)后,再在以后的版本更新中启用热更新。
  3. 打包的wgt文件的版本号必须和app打包的版本号相同,

二、操作步骤

1.打包wgt更新文件包

发行-(原生app-制作wgt包)

2.将打包好的wgt文件放在服务器上,保存好链接地址

wgtUrl="https://www.xxx/xxx.wgt"//测试地址

3.代码

updateVersion() {
	    var that =this 
		uni.getSystemInfo({
			success: (res) => {
				//检测当前平台,如果是安卓则启动安卓更新  
				if (res.platform == "android") {
					that.CheckAndroidUpdate();
				} else {
					
				}
			}
		})
	},
CheckAndroidUpdate() {
				var that = this;
				let params = {
					//填写请求服务器版本接口的参数
				};
				return this.$http
					.get('/consumer/system/app/version', params)
					.then(data => {
						console.log(data)
						if (data.length != 0) {
							//获取当前app的版本号
							plus.runtime.getProperty(plus.runtime.appid, function(inf) {
								console.log(inf.version,'当前版本号')
								console.log(data.versionDisplay,'服务器存储的app的版本号')
								    //是否强制更新(存储版本表中的字段)
									if (data.compulsoryFlag == 1) {	
										plus.nativeUI.alert("发现新版本,点击确认下载!", function() {
											//强制更新()
											plus.runtime.openURL(data.url);
										})
									} else 
									if (inf.version != data.versionDisplay)  {
										    //判断是否wifi下下载更新
											if (plus.networkinfo.getCurrentType() != 3) {
												    uni.showModal({
														title:'发现新版本'
												        content: '当前网络为非WIFI连接,确定下载?',
												        success: function (res) {
												            if (res.confirm) {
												               that.downApk()
												            } else if (res.cancel) {
												               
												            }
												        }
												    });
													
											} else {
												uni.showModal({
													title:'发现新版本'
												    content: '确定下载?',
												    success: function (res) {
												        if (res.confirm) {
												           that.downApk()
												        } else if (res.cancel) {
												           
												        }
												    }
												});
												   
											}			
										}, cancel => {
										})
									} else {
									  
								   }
								
							});
						}
					})
					.catch(error => {
						this.$message.error(error.message);
					});
//版本更新
downApk() {
	var that = this;
	var url = wgtUrl;
	plus.nativeUI.showWaiting("下载更新文件...");
	const downloadTask = uni.downloadFile({
		url: url, //仅为示例,并非真实的资源
		success: (res) => {
			if (res.statusCode === 200) {
				that.installWgt(res.tempFilePath)
						
			}
		},
	   fail:(err)=>{
		   plus.nativeUI.alert("下载失败!");
	   }
	});
	//监听下载速度
	downloadTask.onProgressUpdate((res) => {

		// console.log('已下载' + res.progress + '%');
	});
},
installWgt(path) {
			plus.nativeUI.showWaiting("安装更新文件...");
			plus.runtime.install(path, {force: true}, function() {
				plus.nativeUI.closeWaiting();
				plus.nativeUI.alert("应用资源更新完成!", function() {
				    //更新完成,重启app
					plus.runtime.restart();
				});
			}, function(e) {
				plus.nativeUI.closeWaiting();
				plus.nativeUI.alert("安装更新文件失败[" + e.code + "]:" + e.message);
			});
},

总结

小提示:检查app更新的方法我是写在App.vue文件中的,所以强制更新的时候如果用户退出浏览器不进行更新,他依然可以使用老的版本,所以我在首页文件的onShow中调用了App.vue的更新方法

onShow() {
   getApp().updateVersion()
},

如有不妥,敬请指正!!!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值