欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

uniapp開發(fā)APP之強制更新和熱更新的實現(xiàn)

 更新時間:2022年12月21日 08:44:26   作者:藍德錦  
使用uni-app開發(fā),可將代碼編譯到iOS、Android、微信小程序等多個平臺,升級時也需考慮多平臺同步升級,下面這篇文章主要給大家介紹了關(guān)于uniapp開發(fā)APP之強制更新和熱更新的相關(guān)資料,需要的朋友可以參考下

前言

app和h5相比,有著更新延遲和更新難的特性,h5在部署更新后可以保證所有用戶訪問的都是最新的功能,而app則可能存在多個版本,用戶也可以選擇不升級繼續(xù)使用;

但是有時候,app進行了大規(guī)模的調(diào)整,導致之前所有版本的app都不可用,或者一些重要功能作出了調(diào)整(比如收費內(nèi)容發(fā)生改變),強制用戶需要更新app,這樣的情況并不少見;

因此在第一版本的app內(nèi),就應(yīng)該把包內(nèi)更新的功能加上,以保證app的更新續(xù)航。

整包更新和熱更新

APP的更新分為整包更新和熱更新。

整包更新是指下載完整apk文件進行覆蓋安裝。

熱更新是指把app有改動的地方打包進wgt文件,只更新wgt文件中的內(nèi)容,不進行整包安裝,在用戶視角也叫做省流量更新

版本號約束

既然是版本更新,那就離開版本號的約束。

因為涉及兩種更新方式,所以要先制定版本號的規(guī)范:
建議 嚴格遵循 Semantic Versioning 2.0.0 語義化版本規(guī)范。

主版本號:不兼容的 API 修改

次版本號:向下兼容的功能性新增

修訂號:向下兼容的問題修正

實現(xiàn)原理

  • 開發(fā)后臺版本管理功能,每次發(fā)版上傳android安裝包,記錄版本號、是熱更新還是整包更新、是否強制更新等
  • 每次打開app(onLaunch生命周期)的時候,通過接口請求最新版本信息,再獲取當前安裝包信息,對比版本號
  • 如果版本號不一致,且接口獲取的版本號大于當前應(yīng)用的版本號,則進行整包更新或熱更新。
  • 需要注意的是,ios并不存在下載安裝包覆蓋安裝這種操作,所以在ios平臺需要跳轉(zhuǎn)到appstore進行更新
export default {
 onLaunch: function() {
     // 條件編譯,只在app環(huán)境下進行更新操作
  // #ifdef APP-PLUS  
  if (process.env.NODE_ENV === 'production') { // 只在正式環(huán)境下啟用,避免更新影響開發(fā)和測試環(huán)境(這步取決于你的需求)
  
      // 獲取app運行信息
   plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) {
       
       // 通過接口獲取最新版本信息,具體請求不演示
    getVersion({
     platform: '1'
    }).then(res => {
    
     if (!res) {
      return;
     }
                    
                    // 版本號得到的是類似 '7.0.1'的字符串,把它去除.并轉(zhuǎn)為純數(shù)字
     const appCode = parseInt(res.app_code.split('.').join(''))
     const version = parseInt(widgetInfo.version.split('.').join(''))

     if (appCode > version) { // 只有接口版本號 > 當前包版本號才進行更新
         // type為0熱更新(看接口設(shè)計)
      if (res.type == '0') { // 熱更新,下載更新文件,這一步可以先顯示更新提示的ui,用戶點擊更新后再下載更新
       this.updateHot(res.download_url)
      } else if (res.type == '1') { // 整包更新,這一步可以先顯示更新提示的ui,用戶點擊更新后再下載更新
          this.updatePackage(res.download_url)
      }
     }
    }).catch(err => {
     console.error(err)
    })
   });
  }
 },
 methods: {
     // 整包更新
     updatePackage(url) {
     
         // ios平臺不允許這樣更新,所以我們需要跳轉(zhuǎn)到appstore進行更新
        if (uni.getSystemInfoSync().platform === 'ios') {
          plus.runtime.launchApplication({
     action: 'itms-apps://xxx' // 鏈接可以通過接口獲取
    });
         } else {
          this.isDownloading = true
          
          // 構(gòu)建了下載任務(wù),但此時并未開始下載
          const dtask = plus.downloader.createDownload(url, {},
           (downloadResult, status) => {
            if (status === 200) {
             plus.runtime.install(downloadResult.filename, {
           force: false
          },
          function() {
           plus.runtime.restart(); // 安裝成功后重啟
          },
          function(e) {
           uni.showToast({
            icon: 'none',
            title: '下載更新失敗'
           })
          });
            }
           }
          );
        
                // 執(zhí)行安裝包下載
          dtask.start();
         }
     },
     // 熱更新
     updateHot(url) {
         uni.downloadFile({
    url,
    success: (downloadResult) => {
     if (downloadResult.statusCode === 200) {
         // 下載更新文件成功后進行安裝
      plus.runtime.install(downloadResult.tempFilePath, {
       force: false // 是否強制安裝, 如果將要安裝應(yīng)用的版本號不高于現(xiàn)有應(yīng)用的版本號則終止安裝,并返回安裝失敗。
      },
      function() {
       uni.showToast({
        title:'更新完畢,即將重啟',
        icon: 'none',
        position: 'bottom'
       })
       setTimeout(() => {
        plus.runtime.restart(); // 安裝完成后重啟應(yīng)用
       },2000)
      })
     }
    }
   });
     }
 }
}

其他方案

插件市場提供了uni-upgrade-center升級方案,包含了后臺管理app版本以及app自動更新的邏輯,需要注意的是后臺管理是基于uni-admin框架的插件,如果應(yīng)用內(nèi)沒有使用uni-admin,集成起來會相對麻煩

參考資料

uni-app 資源在線升級/熱更新

總結(jié)

到此這篇關(guān)于uniapp開發(fā)APP之強制更新和熱更新的文章就介紹到這了,更多相關(guān)uniappAPP強制更新和熱更新內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論