----微信小程序熱更新----


公司的小程序項目上線, 后期還會有小型的版本迭代. 為了讓用戶能在我們進行版本迭代后及時使用最新版本的功能. 做了以下優化..

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

知識點2: 小程序的啟動分為"冷啟動" 和 "熱啟動".
熱啟動是指: 小程序打開后,在一段時間內(目前:5分鍾)再次被打開,此時會將后台的小程序切換到前台。
冷啟動是指: 小程序首次打開或銷毀后再次被打開

知識點3: 更新版本
冷啟動時, 如果發現有新版本,將會異步下載新版本的代碼包,並同時用客戶端本地的包進行啟動,即新版本的小程序需要等下一次冷啟動才會應用上
如果要馬上應用最新版本,使用 wx.getUpdateManager API 進行處理。

代碼如下:

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

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

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

 
image.png

(部分開發者工具版本, 每次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: '新版本已經准備好,是否重啟應用?', success: function (res) { if (res.confirm) { updateManager.applyUpdate() } } }) }) updateManager.onUpdateFailed(function () { wx.showModal({ title: '已經有新版本了喲~', content: '新版本已經上線啦~,請您刪除當前小程序,重新搜索打開喲~' }) }) } }) } else { wx.showModal({ title: '提示', content: '當前微信版本過低,無法使用該功能,請升級到最新微信版本后重試。' }) } } 

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

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

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

 
image.png

 

 



作者:小小小魔仙
鏈接:https://www.jianshu.com/p/4f5e3faaf483
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

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



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