可前往此處公眾號查看 https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=Mzg3NTAzMzAxNA==&scene=124#wechat_redirect
開發工具HbuilderX
開發框架 uni-app、h5+
1、生成 App 資源升級包
1.1、修改版本號
1.2、首先,更新 manifest.json 中的版本號,
比如之前是 1.0.0,那么新版本應該是 1.0.1 或 1.1.0 這樣,

2、發行
2.1、然后,在 HBuilderX 中生成升級包(wgt),
2.2、選單->發行->原生App-制作移動App資源升級包

2.3、生成結束會在控制臺告知升級包的輸出位置,

3.安裝資源升級包
3.1、應用的升級需要服務端與客戶端配合完成,下面以本地測驗程序中的操作舉例說明:
3.2、生成的 wgt 檔案給后端人員,放在服務器目錄下,生成下載鏈接,回傳給開發app開發者
4、服務端介面
4.1、與后端約定檢測升級的介面 ,介面地址 'Home/getShopAppVersion’
5、客戶端檢測升級
5.1、在 App.vue 的 onLaunch 中檢測升級(也可以在首頁中,首頁中請使用onLoad),代碼如下
// 熱更新 wgtUpload:function(){ const that=this; //plus.runtime.getProperty(),獲取本機安裝的版本,具體使用請參照如下鏈接 //https://www.html5plus.org/doc/zh_cn/runtime.html#plus.runtime.WidgetInfo plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) { //'Home/getShopAppVersion' 獲取服務端的版本 that.$http.post('Home/getShopAppVersion',{},{'load':false}).then(function(response){ // 獲取服務端版本轉化為陣列 var onlineAndroidVersion=response.data.android.split("."); // 獲取本機安裝版本轉化為陣列 var localAndroidVersion=that.$Androidversion.split("."); // 是否更新 var isUpload=false; for(var i=0;i<onlineAndroidVersion.length;i++){ // 服務端版本是否大于本地版本 if(parseInt(onlineAndroidVersion[i])>parseInt(localAndroidVersion[i])){ isUpload=true; } } if(response.code==1){ var data=https://www.cnblogs.com/ts119/p/response.data; if(isUpload==true){ // 下載檔案資源到本地,下載剛才打包的 .wgt檔案 uni.downloadFile({ url: "http://api.yunshanghulian.net/__UNI__F89F8A7.wgt", // 下載資源的 url success: (downloadResult) => { if (downloadResult.statusCode === 200) { /* 安裝應用, 要安裝的檔案路徑(downloadResult.tempFilePath) force 是否強制安裝 true表示強制安裝,不進行版本號的校驗;false則需要版本號校驗, 如果將要安裝應用的版本號不高 于現有應用的版本號則終止安裝,并回傳安裝失敗, 僅安裝wgt和wgtu時生效,默認值 false, */ plus.runtime.install(downloadResult.tempFilePath, { force: true }, function() { // 應用熱重啟,重新啟動進入首頁, plus.runtime.restart(); isUpload=false; console.log('安裝成功','install success...'); }, function(e) { console.error('安裝失敗','install fail...'); }); } } }); } } }) }); }
plus.runtime.version 或者 uni.getSystemInfo() 讀取到的是 apk/ipa 包的版本號,而非 manifest.json 資源中的版本資訊,所以這里用 plus.runtime.getProperty() 來獲取相關資訊
安裝 wgt 資源包成功后,必須執行 plus.runtime.restart(),否則新的內容并不會生效,
如果App的原生引擎不升級,只升級wgt包時需要注意測驗wgt資源和原生基座的兼容性,平臺默認會對不匹配的版本進行提醒,如果自測沒問題,可以在manifest中配置忽略提示,詳見https://ask.dcloud.net.cn/article/35627
注意:
關于熱更新是否影回應用上架
應用市場為了防止開發者不經市場審核許可,給用戶提供違法內容,對熱更新大多持排斥態度,
但實際上熱更新使用非常普遍,不管是原生開發中還是跨平臺開發,
Apple曾經禁止過jspatch,但沒有打擊其他的熱更新方案,包括cordovar、react native、DCloud,封殺jspatch其實是因為jspatch有嚴重安全漏洞,可以被黑客利用,造成三方黑客可篡改其他App的資料,
使用熱更新需要注意:
上架審核期間不要彈出熱更新提示
熱更新內容使用https下載,避免被三方網路劫持
不要更新違法內容、不要通過熱更新破壞應用市場的利益,比如iOS的虛擬支付要老老實實給Apple分錢
如果你的應用沒有犯這些錯誤,應用市場是不會管的
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/65748.html
標籤:JavaScript
