uniapp--热更新代码

  1. 第一步通过ajax请求后端的wgt文件,这个文件是可以通过HBUILDX生成的更新包
  2. 第二步官网有给了一个前端的更新代码,不过会出现一个错误 unexpected EOF,所以我们用另一个写法
    plus.runtime.getProperty(plus.runtime.appid, function(info) {
    					// ajax请求,这里就不写了,这里模拟一个数据,通过Promis方式,或者回调,这里看你们项目的需求,请求回来数据就可以了
    					let res = {
    						msg : '请求成功',
    						err : false,
    						data : {
    							upload : true,
    							wgtUrl : '服务器存放的地址'
    						},
    						code : 200
    					}
    					// 这里是请求成功后的回调处理
    					const {
    						data,
    						msg,
    						code
    					} = res;
    					if (code == 200) {
    						const {
    							wgtUrl,
    							update
    						} = data;
    						if (update && wgtUrl) {
    							/* 添加下载任务 */
    							var dtask = plus.downloader.createDownload(
    								wgtUrl, {
    									filename: '_doc/update/' + info.name + '/' + new Date().getTime() + '/'
    								},
    								(res, code) => {
    									plus.runtime.install(
    										res.filename, {
    											force: false
    										},
    										(res) => {
    											uni.hideLoading();
    											plus.runtime.restart();
    										},
    										(e) => {
    											uni.hideLoading();
    										}
    									);
    								}
    							);
    							try {
    								/* 监听下载进度 */
    								dtask.start(); // 开启下载的任务
    								var prg = 0;
    								var showLoading = plus.nativeUI.showWaiting("正在下载"); //创建一个showWaiting对象 
    								dtask.addEventListener('statechanged', function(
    									task,
    									status
    								) {
    									// 给下载任务设置一个监听 并根据状态  做操作
    									switch (task.state) {
    										case 1:
    											showLoading.setTitle("正在下载");
    											break;
    										case 2:
    											showLoading.setTitle("已连接到服务器");
    											break;
    										case 3:
    											prg = parseInt(
    												(parseFloat(task.downloadedSize) /
    													parseFloat(task.totalSize)) *
    												100
    											);
    											showLoading.setTitle("  正在下载" + prg + "%  ");
    											break;
    										case 4:
    											plus.nativeUI.closeWaiting();
    											//下载完成
    											break;
    									}
    								});
    							} catch (err) {
    								plus.nativeUI.closeWaiting();
    								uni.showToast({
    									title: '更新失败',
    									mask: false,
    									duration: 1500
    								});
    							}
    						}
    					}
    					
    				});

     

uniapp的更新回调写法 

const dtask = uni.downloadFile({
									url: wgtUrl,
									success: (downloadResult) => {
										console.log(downloadResult);
										if (downloadResult.statusCode === 200) {
											plus.runtime.install(downloadResult.tempFilePath, {
												force: false
											}, function(res) {
												plus.runtime.restart();
											}, function(e) {
												uni.showToast({
													title: '更新失败',
													mask: false,
													duration: 1500,
													icon: 'none'
												});
												uni.switchTab({
													url: '/pages/index/index'
												});
											});
										}
									}
								});
								try {
									var prg = 0;
									var showLoading = plus.nativeUI.showWaiting("正在下载"); //创建一个showWaiting对象 
									dtask.onProgressUpdate((res) => {
										prg = res.progress;
										showLoading.setTitle("  正在下载" + prg + "%  ");
										
										if (prg >= 100) {
											plus.nativeUI.closeWaiting();
										}
									});
								} catch (err) {
									plus.nativeUI.closeWaiting();
									uni.showToast({
										title: '更新失败',
										mask: false,
										duration: 1500
									});
								}

具体的代码见上图,给用户添加一个下载的提示,为了用户体验,这里我们再给用户添加上一个进度条,增加产品体验,让用户知道下载的进度,而不是误以为死机

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值