<bdo id="4g88a"><xmp id="4g88a">
  • <legend id="4g88a"><code id="4g88a"></code></legend>

    關于小程序如何做到強制更新

    前言

    在小程序的日常迭代中,有一些場景我們可能需要在小程序發布后,用戶能夠馬上感知并更新,比如上線新活動、修復高危漏洞等,如果用戶因為各種原因未能及時更新小程序,這就可能導致一些功能無法正常使用或者存在安全隱患,因此,實現小程序的強制更新功能就顯得尤為重要。本文將探討小程序如何做到強制更新,以確保用戶始終使用最新、最安全的小程序版本。

    小程序的運行機制

    在這之前,我們得先來了解一下小程序的生命周期,從啟動到銷毀它都是如何進行的

    生命周期

    小程序的啟動

    廣義的小程序啟動可以分為兩種情況,一種是冷啟動,一種是熱啟動。

    從小程序生命周期的角度來看,我們一般講的「啟動」專指冷啟動,熱啟動一般被稱為后臺切前臺。

    • 冷啟動:如果用戶首次打開,或小程序銷毀后被用戶再次打開,此時小程序需要重新加載啟動,即冷啟動。
    • 熱啟動:如果用戶已經打開過某小程序,然后在一定時間內再次打開該小程序,此時小程序并未被銷毀,只是從后臺狀態進入前臺狀態,這個過程就是熱啟動。

    前臺與后臺

    • 前臺:小程序的「前臺」狀態一般指的是小程序處于打開狀態,頁面正在展示給用戶
    • 后臺:當用戶關閉小程序時小程序并沒有真正被關閉,而是進入了「后臺」狀態

    切后臺的方式包括但不限于以下幾種:

    • 點擊右上角膠囊按鈕離開小程序
    • iOS 從屏幕左側右滑離開小程序
    • 安卓點擊返回鍵離開小程序
    • 小程序前臺運行時直接把微信切后臺(手勢或 Home 鍵)
    • 小程序前臺運行時直接鎖屏

    掛起

    小程序進入「后臺」狀態一段時間后(目前是 5 秒),微信會停止小程序 JS 線程的執行,小程序進入「掛起」狀態。此時小程序的內存狀態會被保留,但開發者代碼執行會停止,事件和接口回調會在小程序再次進入「前臺」時觸發。

    當開發者使用了后臺音樂播放、后臺地理位置等能力時,小程序可以在「后臺」持續運行,不會進入到「掛起」狀態

    銷毀

    當小程序進入后臺或被掛起時,它并不會一直保留在后臺,當滿足以下兩點時,小程序會被銷毀

    • 當小程序進入后臺并被「掛起」后,如果很長時間(目前是 30 分鐘)都未再次進入前臺,小程序會被銷毀。
    • 當小程序占用系統資源過高,可能會被系統銷毀或被微信客戶端主動回收。

    小程序的更新機制

    小程序默認的更新機制可以分為兩類:啟動時同步更新、啟動時異步更新

    啟動時同步更新

    在以下情況下,小程序啟動時會同步更新代碼包。同步更新會阻塞小程序的啟動流程,影響小程序的啟動耗時。

    • 定期檢查發現版本更新,微信運行時定時檢查下載更新,如果有更新,下次小程序啟動時會同步進行更新,更新到最新版本后再打開小程序
    • 用戶長時間未使用小程序,會強制同步更新

    啟動時異步更新

    • 即使啟動前未發現更新,小程序每次冷啟動時,都會異步檢查是否有更新版本。如果發現有新版本,將會異步下載新版本的代碼包。但當次啟動仍會使用客戶端本地的舊版本代碼,即新版本的小程序需要等下一次冷啟動才會使用

    強制更新

    在啟動時異步更新的情況下,如果開發者希望立刻進行版本更新,可以使用 wx.getUpdateManagerAPI 進行處理,該API會返回一個UpdateManager實例

    UpdateManager 對象為小程序提供了四種關鍵的方法,用于管理和監控小程序的更新過程。

    • UpdateManager.applyUpdate():在小程序新版本已經下載完成的情況下(即接收到 onUpdateReady 回調后),此方法用于強制小程序重啟并啟用新版本。

    • UpdateManager.onCheckForUpdate(function callback):此方法用于監聽向微信后臺發起的更新檢查結果事件。微信小程序在冷啟動時會自動進行更新檢查,開發者無需主動觸發。

    • UpdateManager.onUpdateReady(function callback):此方法用于監聽小程序的新版本更新就緒事件。一旦新版本可用,客戶端會自動觸發下載過程(無需開發者額外操作),并在下載成功后調用此回調函數。

    • UpdateManager.onUpdateFailed(function callback):此方法用于監聽小程序更新失敗的事件。當小程序有新版本且客戶端嘗試自動下載更新時(同樣無需開發者干預),如果因網絡問題或其他原因導致下載失敗,將會觸發此回調函數。

    根據以上API,我們就能夠在小程序法版后,通知用戶進行強制更新

    if (taro.canIUse('getUpdateManager')) {
          const updateManager = taro.getUpdateManager();
          updateManager.onCheckForUpdate(function (res) {
            console.log('onCheckForUpdate====', res);
            if (res.hasUpdate) {
              // 小程序已更新
              updateManager.onUpdateReady(function () {
                taro.showModal({
                  title: '更新提示',
                  showCancel: false,
                  confirmText: '立即重啟',
                  content: '新版本已經上線,是否重啟小程序以應用新版本?',
                  success: function (res) {
                    if (res.confirm) {
                      // 調用 applyUpdate 應用新版本并重啟
                      updateManager.applyUpdate();
                    }
                  }
                });
              });
              // 更新失敗
              updateManager.onUpdateFailed(function () {
                taro.showModal({
                  title: '更新失敗',
                  content: '新版本下載失敗,請刪除當前小程序后重新打開。',
                });
              });
            }
          });
        } else {
          // 版本過低
          taro.showModal({
            title: '提示',
            content: '當前微信版本過低,無法使用該功能,請升級到最新微信版本后重試。',
          });
        }
    

    因為小程序的開發版和體驗版沒有版本的概念,所以無法在開發版和體驗版上測試更版本更新情況,但可以通過微信開發者工具 => 添加編譯模式 => 編譯設置 => 下次編譯時模擬更新來進行調試

    posted @ 2024-03-14 16:57  前端南玖  閱讀(722)  評論(0編輯  收藏  舉報
    免费视频精品一区二区_日韩一区二区三区精品_aaa在线观看免费完整版_世界一级真人片
    <bdo id="4g88a"><xmp id="4g88a">
  • <legend id="4g88a"><code id="4g88a"></code></legend>