- 第一步通過ajax請求後端的wgt文件,這個文件是可以通過HBUILDX生成的更新包
- 第二步官網有給了一個前端的更新代碼,不過會出現一個錯誤 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
});
}
具體的代碼見上圖,給用戶添加一個下載的提示,爲了用戶體驗,這裏我們再給用戶添加上一個進度條,增加產品體驗,讓用戶知道下載的進度,而不是誤以爲死機