uniapp检查更新并显示下载进度

uni.request({
	url: "http://2132",  //请求更新地址
	data: '',
	success(res) {
		if (!!res.data) {
			uni.showModal({
				title: '版本更新' + res.data.versionCode,
				content: res.data.description,
				confirmText: "更新",
				showCancel: !res.forceUpdate,
				success: function(e) {
					if (e.confirm) {
						if (plus.os.name.toLowerCase() == 'ios') {
							// 跳转到下载页面
							plus.runtime.openURL(res.data.upgradeUrl)
						} else {
							var dtask = plus.downloader.createDownload(
								res.data.upgradeUrl, {},
								function(d, status) {
									uni.showToast({
										title: '下载完成',
										mask: false,
										duration: 1000
									});
									// 下载完成
									if (status == 200) {
										plus.runtime.install(plus.io.convertLocalFileSystemURL(d.filename), {}, e => e, function(error) {
											uni.showToast({
												title: '安装失败-01',
												mask: false,
												duration: 1500
											});
										})
									} else {
										uni.showToast({
											title: '更新失败-02',
											mask: false,
											duration: 1500
										});
									}
								});
							 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: '更新失败-03',
								  	mask: false,
								  	duration: 1500
								  });
							  }
						}

					} else {
						//取消
					}
				}
			});
		} else {
			uni.showModal({
						    title: '提示',
						content: '已是最新版本',
						showCancel: false
					});
		}
	},
})

 

 
### UniApp 应用更新时文件未被正确替换的解决方案 当遇到UniApp应用更新过程中文件未能成功替换的情况,通常是因为缓存机制或资源加载路径配置不当所引起。针对这一现象,可以采取以下措施来确保新版本的应用程序能够正常覆盖旧版文件。 #### 清除缓存数据 为了防止旧版本中的静态资源(如图片、样式表等)残留影响到新版显示效果,在发布前应考虑加入清除缓存逻辑。可以在`manifest.json`中设置全局变量用于控制是否清理缓存: ```json { "plus": { "distribute": { "clearCacheOnStart": true, ... } }, } ``` 此外还可以调用API手动执行清空操作[^1]: ```javascript uni.clearStorage(); // 清楚本地存储 plus.cache.clear(function(){ console.log('Clear cache success'); }); ``` #### 修改打包构建参数 有时即使重新编译项目也可能因为某些原因导致生成物未真正发生变化。此时建议调整构建工具链的相关选项以强制刷新输出结果。对于HBuilderX而言,则可以通过修改`build.json`内的字段达到目的: ```json { "app-plus":{ "minifyCss":false, "compressImages":true, ... }, "h5":{ "devServer":{ "hotReload": false } } } ``` 关闭热重载功能有助于避免不必要的干扰因素;而压缩图像则能减少体积加快传输速度从而降低失败几率[^2]。 #### 检查网络环境稳定性 如果目标设备处于较差联网条件下,可能会造成下载中断进而使得部分组件缺失。因此有必要确认客户端连接质量良好后再尝试升级流程。可通过监听事件获取状态变化通知给出相应提示信息给用户知晓当前进度状况。 ```javascript // 监听网络状态改变 window.addEventListener('online', function () { /* ... */ }); window.addEventListener('offline', function (){ /* ... */ }); if (!navigator.onLine){ uni.showToast({ title:'请检查您的网络连接', icon:"none" }) } ``` #### 实施灰度发布策略 考虑到大规模推送存在风险以及不同机型适配差异较大等问题,可先选取少量样本群体作为试点对象逐步推进直至全面铺开。期间密切跟踪反馈日志排查潜在隐患以便及时作出调整优化举措[^3].
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值