uniapp: 微信小程序版本自動更新的方法

微信小程序版本自動更新的方法
公司的小程序項目上線, 后期還會有小型的版本迭代. 為了讓用戶能在我們進行版本迭代后及時使用最新版本的功能. 做了以下優(yōu)化..

知識點1: 當用戶點擊左上角關(guān)閉,或者按了設(shè)備Home 鍵離開微信,小程序并沒有直接銷毀,而是進入了后臺;
當再次進入微信或再次打開小程序,又會從后臺進入前臺,只有當小程序進入后臺一定時間,或者系統(tǒng)資源占用過高,才會被真正的銷毀。

知識點2:小程序的啟動分為"冷啟動" 和 "熱啟動".

  • 熱啟動是指: 小程序打開后,在一段時間內(nèi)(目前:5分鐘)再次被打開,此時會將后臺的小程序切換到前臺。
  • 冷啟動是指: 小程序首次打開或銷毀后再次被打開

知識點3: 更新版本
冷啟動時, 如果發(fā)現(xiàn)有新版本,將會異步下載新版本的代碼包,并同時用客戶端本地的包進行啟動,即新版本的小程序需要等下一次冷啟動才會應(yīng)用上。

如果要馬上應(yīng)用最新版本,使用wx.getUpdateManager API 進行處理。
代碼如下:

// 在app.js里寫下以下代碼
 onLaunch () {
  if (wx.canIUse('getUpdateManager')) {
   const updateManager = wx.getUpdateManager()
   updateManager.onCheckForUpdate(function (res) {
    console.log('onCheckForUpdate====', res)
    // 請求完新版本信息的回調(diào)
    if (res.hasUpdate) {
     console.log('res.hasUpdate====')
     updateManager.onUpdateReady(function () {
      wx.showModal({
       title: '更新提示',
       content: '新版本已經(jīng)準備好,是否重啟應(yīng)用?',
       success: function (res) {
        console.log('success====', res)
        // res: {errMsg: "showModal: ok", cancel: false, confirm: true}
        if (res.confirm) {
         // 新的版本已經(jīng)下載好,調(diào)用 applyUpdate 應(yīng)用新版本并重啟
         updateManager.applyUpdate()
        }
       }
      })
     })
     updateManager.onUpdateFailed(function () {
      // 新的版本下載失敗
      wx.showModal({
       title: '已經(jīng)有新版本了喲~',
       content: '新版本已經(jīng)上線啦~,請您刪除當前小程序,重新搜索打開喲~'
      })
     })
    }
   })
  }
 }

知識點4: 小程序重新初始化時會觸發(fā)onLaunch事件. onLaunch事件會觸發(fā)在頁面onShow事件之前.獲取小程序更新版本可以寫在onLaunch里.

知識點5:在開發(fā)和體驗版無法測試版本更新. 需要在開發(fā)者工具里,編譯時選擇"模擬更新編譯"

image.png

(部分開發(fā)者工具版本, 每次update編譯時都需要重新勾選此選項)
點擊確定,重新編譯.
頁面會彈窗顯示:
image.png

點擊確認后: 
image.png

控制臺顯示:
image.png

知識點6: 隨著小程序的不斷更新, 部分功能可能需要最新版的微信客戶端才能使用. 這時候可以彈窗提示用戶更新到最新版本微信

 if (wx.canIUse('getUpdateManager')) {
 ...
} else {
 // can't use getUpdateManager
 wx.showModal({
    title: '提示',
    content: '當前微信版本過低,無法使用該功能,請升級到最新微信版本后重試。'
  })

完整版本:

 onLaunch () {
  if (wx.canIUse('getUpdateManager')) {
   const updateManager = wx.getUpdateManager()
   updateManager.onCheckForUpdate(function (res) {
    if (res.hasUpdate) {
     updateManager.onUpdateReady(function () {
      wx.showModal({
       title: '更新提示',
       content: '新版本已經(jīng)準備好,是否重啟應(yīng)用?',
       success: function (res) {
        if (res.confirm) {
         updateManager.applyUpdate()
        }
       }
      })
     })
     updateManager.onUpdateFailed(function () {
      wx.showModal({
       title: '已經(jīng)有新版本了喲~',
       content: '新版本已經(jīng)上線啦~,請您刪除當前小程序,重新搜索打開喲~'
      })
     })
    }
   })
  } else {
   wx.showModal({
    title: '提示',
    content: '當前微信版本過低,無法使用該功能,請升級到最新微信版本后重試。'
   })
  }
 }

知識點7: 如果在onLaunch里進行請求, 這是異步請求. 如果對交互順序有要求, 如: 版本更新--重新獲取數(shù)據(jù)-- 用戶展示, 那么需要考慮在callback里進行重獲數(shù)據(jù).

知識點8:小程序啟動時,正常是會熱更新,下載新版本的包,下一次啟動就會使用新包。但發(fā)現(xiàn)有更新不成功的情況發(fā)生.
官方回答: 策略生效跟網(wǎng)絡(luò)環(huán)境以及發(fā)布時間等若干因素有關(guān),會盡可能讓小程序快地更新,但無法保證每次都熱更新成功。

知識點9:小程序的異步更新發(fā)生在冷啟動過程. 官方不建議熱更新. 原因:

image.png

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

友情鏈接更多精彩內(nèi)容