生成 App 資源升級(jí)包
修改版本號(hào)
更新 manifest.json 中的版本號(hào)嫌术。
例:若原先版本為 1.0.0彤敛,那么新版本應(yīng)該是 1.0.1 或 1.1.0
發(fā)行
在 HBuilderX 中生成升級(jí)包(wgt)。
菜單->發(fā)行->原生App-制作移動(dòng)App資源升級(jí)包
存放資源
將 xxxx.wgt 文件存放在服務(wù)器的 static 目錄下卖词,即
https://www.xxx.com/static/wgt/xxxx.wgt
檢測(cè)是否存在新版本
//獲取App版本號(hào)
getAppVersion() {
let that = this;
plus.runtime.getProperty(plus.runtime.appid, (wgtinfo) => {
that.appVersion = wgtinfo.version;
that.checkUpdate()
});
},
//檢查更新
checkUpdate: function() {
let that = this;
getAppUpdate({
platform: that.getPlatform() == 'android' ? 2 : 1,
appVersion: that.appVersion
}).then(function(res) {
if (!res) return;
if (res.data) {
if (res.data.versionChanged == 'true') {
that.checkInfo.wgtUrl = res.data.wgtUrl;
that.checkInfo.content = res.data.content;
that.checkInfo.foces = res.data.foces;//是否需要強(qiáng)制更新
that.$refs.popupUpgrade.open();
}
} else {
plus.nativeUI.toast("獲取數(shù)據(jù)失敗")
}
}).catch(function(error) {
plus.nativeUI.toast("請(qǐng)檢查網(wǎng)絡(luò)連接")
});
},
提示更新資源信息
this.$refs.popupUpgrade.open();
下載資源包
downWgt(path) {
let that = this;
// 在線升級(jí)app/熱更新
const downloadTask = uni.downloadFile({ //下載文件
url: path,
success: (downloadResult) => {
if (downloadResult.statusCode === 200) {
// 更新升級(jí)
plus.runtime.install(downloadResult.tempFilePath, {
force: false
}, function() {
// console.log('install success...');
plus.nativeUI.alert("應(yīng)用資源更新完成巩那!", function() {
plus.runtime.restart();
});
}, function(e) {
plus.nativeUI.toast("更新失敗,請(qǐng)稍后再試");
});
}
}
});
downloadTask.onProgressUpdate((res) => { //下載文件的進(jìn)度
// console.log('downloatTask',res);
that.downloadSize = res.totalBytesWritten; //當(dāng)前下載大小
that.prg = res.progress; //當(dāng)前下載比例
that.totalSize = res.totalBytesExpectedToWrite; //
});
},
重啟App
plus.runtime.restart();
注意事項(xiàng)
應(yīng)用市場(chǎng)為了防止開(kāi)發(fā)者不經(jīng)市場(chǎng)審核許可坏平,給用戶(hù)提供違法內(nèi)容拢操,對(duì)熱更新大多持排斥態(tài)度。
但實(shí)際上熱更新使用非常普遍舶替,不管是原生開(kāi)發(fā)中還是跨平臺(tái)開(kāi)發(fā)令境。
Apple曾經(jīng)禁止過(guò)jspatch,但沒(méi)有打擊其他的熱更新方案顾瞪,包括cordovar舔庶、react native抛蚁、DCloud。封殺jspatch其實(shí)是因?yàn)閖spatch有嚴(yán)重安全漏洞惕橙,可以被黑客利用瞧甩,造成三方黑客可篡改其他App的數(shù)據(jù)。
使用熱更新需要注意:
上架審核期間不要彈出熱更新提示
熱更新內(nèi)容使用https下載弥鹦,避免被三方網(wǎng)絡(luò)劫持
不要更新違法內(nèi)容肚逸、不要通過(guò)熱更新破壞應(yīng)用市場(chǎng)的利益,比如iOS的虛擬支付要老老實(shí)實(shí)給Apple分錢(qián)
如果你的應(yīng)用沒(méi)有犯這些錯(cuò)誤彬坏,應(yīng)用市場(chǎng)是不會(huì)管的朦促。