uni-app熱更新


可前往此處公眾號查看 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=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分錢
如果你的應用沒有犯這些錯誤,應用市場是不會管的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM