UniApp應用更新方案
兩種更新方式
- APP全量升級:需要重新下載安裝包
- 熱更新:通過下載wgt資源包實現,用戶只需重啟應用
Android更新實現
用戶需要授權安裝權限,流程為下載APK后自動彈出安裝界面
var dtask = plus.downloader.createDownload("APK下載地址", {method: "GET"
}, (d, status) => {if (status == 200) {console.log("下載成功安裝: " + d.filename);plus.runtime.install(d.filename)} else {plus.nativeUI.alert("安裝失敗,請稍候重試: " + status)}
});this.downloading = true
dtask.addEventListener('statechanged', (e) => {// 下載進度監聽this.downloadedSize = (e.downloadedSize / 1000000).toFixed(1)this.packageFileSize = (e.totalSize / 1000000).toFixed(1)this.downLoadPercent = (e.downloadedSize / e.totalSize * 100).toFixed(0)
});
dtask.start();
iOS更新實現
直接跳轉至App Store
plus.runtime.openURL("appStore地址");
熱更新實現步驟
-
修改版本號
更新manifest.json中的版本號(如從1.0.0升級到1.0.1或1.1.0) -
生成升級包
在HBuilderX中:菜單->發行->原生App-制作移動App資源升級包(wgt) -
部署更新
將wgt包上傳至服務器,在代碼中實現版本檢測和更新邏輯
uni.downloadFile({url: "wgt地址",success: (downloadResult) => {uni.showLoading({title: '更新中'})if (downloadResult.statusCode === 200) {uni.hideLoading();plus.runtime.install(downloadResult.tempFilePath, {force: true // 是否強制更新}, function() {console.log('install success...');setTimeout(() => {plus.runtime.restart();}, 0)}, function(e) {console.error(e);});} else {console.error('download fail...');}}
});
注意事項
- 開發階段使用HBuilder應用信息,需打包自定義基座或正式包測試
- 使用
plus.runtime.getProperty()
獲取manifest版本信息而非plus.runtime.version
- 安裝wgt包后必須調用
plus.runtime.restart()
使更新生效 - 使用條件編譯限定僅在App平臺執行更新邏輯