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
									});
								}

具體的代碼見上圖,給用戶添加一個下載的提示,爲了用戶體驗,這裏我們再給用戶添加上一個進度條,增加產品體驗,讓用戶知道下載的進度,而不是誤以爲死機

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章