uniapp 如何進行熱更新總結

在進行版本迭代時一般是局部更新,所以熱更新就是新的需求,HBuilderX 1.6.5 起,uni-app 支持生成 App 資源升級包。

完成新需求,需要熱更新時,具體步驟如下:

1:熱更新程序代碼:

在App.vue文件中的onLaunch中編碼

onLaunch() {

let _this = this;

// #ifdef APP-PLUS

/** 鎖定屏幕方向 */

plus.screen.lockOrientation('portrait-primary');

? ? ? ? ? ? console.log("onLaunch111")

/** 檢測升級 */


// 取得版本號

plus.runtime.getProperty(plus.runtime.appid, function(info) {

console.log("當前應用版本:" + info.version + "---" + plus.runtime.version);

_this.$com.ajax("update", {

"appid": plus.runtime.appid,

"version": plus.runtime.version

}, "POST", false,function(ret) {

console.log("【appid】", plus.runtime.appid)

console.log("【version】", plus.runtime.version)

? ? console.log("版本升級接口回調", ret)

if (ret.status) {

// 下載wgt文件?

var wgtUrl = "https://xxxxx.cn/update/1.0.1.wgt";? //下載文件地址(也可以從后臺獲?。?/p>

plus.nativeUI.showWaiting("正在更新中,請稍后..");

plus.downloader.createDownload(wgtUrl, {

filename: "_doc/update/"

}, function(d, status) {

if (status == 200) {

let path =d.filename

// 安裝wgt包 更新應用資源

plus.nativeUI.showWaiting("正在更新中,請稍后...");

plus.runtime.install(d.filename, {

 force: true

}, function() {

plus.nativeUI.closeWaiting();

console.log("新版本文件成功!");

plus.nativeUI.alert("軟件應用更新完成!", function() {

plus.runtime.restart(); //必須執(zhí)行 plus.runtime.restart(),否則新的內容并不會生

});

}, function(e) {

console.log(e)

plus.nativeUI.closeWaiting();

console.log("更新失敗[" + e.code + "]:" + e.message);

plus.nativeUI.alert("更新失敗[" + e.code + "]:" + e.message);

});

} else {

console.log("下載wgt失??!");

plus.nativeUI.alert("下載wgt失??!");

}

plus.nativeUI.closeWaiting();

}).start();

}


})

})

// #endif

},


2:更新 manifest.json 中的版本號(比如之前是 1.0.0,那么新版本應該是 1.0.1 或 1.1.0,小版本更新一般為1.0.1,大版本的話1.1.0)

3:發(fā)行,在 HBuilderX 中生成升級包(wgt),菜單->發(fā)行->原生App-制作移動App資源升級包 ,輸出wgt文件地址后,將文件放在服務器上就可以了。重新啟動APP后配合后端測試驗證。

< PPSS 后續(xù)請注意?。? >

不支持的情況

SDK 部分有調整,比如新增了 Maps 模塊等,不可通過此方式升級,必須通過整包的方式升級。

如果是老的非自定義組件編譯模式,之前沒有 nvue 文件,但更新中新增了 nvue 文件,不能使用此方式。因為非自定義組件編譯模式如果沒有nvue文件是不會打包weex引擎進去的,原生引擎無法動態(tài)添加。自定義組件模式默認就含著weex引擎,不管工程下有沒有nvue文件。

原生插件的增改,同樣不能使用此方式。

注意事項

條件編譯,僅在 App 平臺執(zhí)行此升級邏輯。

appid 以及版本信息等,在 HBuilderX 真機運行開發(fā)期間,均為 HBuilder 這個應用的信息,因此需要打包自定義基座或正式包測試升級功能。

plus.runtime.version 或者 uni.getSystemInfo() 讀取到的是 apk/ipa 包的版本號,而非 manifest.json 資源中的版本信息,所以這里用 plus.runtime.getProperty() 來獲取相關信息。

安裝 wgt 資源包成功后,必須執(zhí)行 plus.runtime.restart(),否則新的內容并不會生效。

如果App的原生引擎不升級,只升級wgt包時需要注意測試wgt資源和原生基座的兼容性。平臺默認會對不匹配的版本進行提醒,如果自測沒問題,可以在manifest中配置忽略提示,詳見https://ask.dcloud.net.cn/article/35627

關于熱更新是否影響應用上架

應用市場為了防止開發(fā)者不經市場審核許可,給用戶提供違法內容,對熱更新大多持排斥態(tài)度。

但實際上熱更新使用非常普遍,不管是原生開發(fā)中還是跨平臺開發(fā)。

Apple曾經禁止過jspatch,但沒有打擊其他的熱更新方案,包括cordovar、react native、DCloud。封殺jspatch其實是因為jspatch有嚴重安全漏洞,可以被黑客利用,造成三方黑客可篡改其他App的數據。

使用熱更新需要注意:

上架審核期間不要彈出熱更新提示

熱更新內容使用https下載,避免被三方網絡劫持

不要更新違法內容、不要通過熱更新破壞應用市場的利益,比如iOS的虛擬支付要老老實實給Apple分錢

如果你的應用沒有犯這些錯誤,應用市場是不會管的。

引用文章地址:https://www.cnblogs.com/neo-java/p/11305638.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容