在開發小程序的時候,版本更新在所難免。所以,我們希望每次打開的小程序的時候,都可以進行版本檢測。如果有新版本,那么,就更新,並且讓用戶能夠重啟,並應用新版本。
實現
開門見山,uni-app官方網站給了我們實現方法。以下是代碼示例。
const updateManager = uni.getUpdateManager(); updateManager.onCheckForUpdate(function (res) { // 請求完新版本信息的回調 console.log(res.hasUpdate); }); updateManager.onUpdateReady(function (res) { uni.showModal({ title: '更新提示', content: '新版本已經准備好,是否重啟應用?', success(res) { if (res.confirm) { // 新的版本已經下載好,調用 applyUpdate 應用新版本並重啟 updateManager.applyUpdate(); } } }); }); updateManager.onUpdateFailed(function (res) { // 新的版本下載失敗 });
根據實例,我把代碼封裝在一個方法里。
然后,根據場景,每次打開小程序 = 當小程序啟動,或者小程序從后台進入前台 = 生命周期 onShow 。所以,在App.vue 的onShow函數下添加方法。當然,如果對更新要求不那么實時,也可以選在在onLaunch生命周期下執行。后文會詳述其區別。
uni.getUpdateManger()說明
官方給的示例代碼中中用到了uni.getUpdateManger() 是什么鬼?
這個API返回的是全局唯一的版本更新管理器對象: updateManage , 用於管理小程序更新。
平台差異
APP | H5 | 微信小程序 | 支付寶小程序 | 百度小程序 | 字節跳動小程序 | QQ小程序 |
× | × | √ | √ | √ | √ | √ |
updateManager對象的方法列表
方法 | 參數 | 說明 |
onCheckForUpdate | callback | 當向小程序后台請求完新版本信息,會進行回調 |
onUpdateReady | callback | 當新版本下載完成,會進行回調 |
onUpdateFailed | callback | 當新版本下載失敗,會進行回調 |
applyUpdate | 當新版本下載完成,調用該方法會強制當前小程序應用上新版本並重啟 |
onCheckForUpdate(callback) 回調結果說明
屬性 | 類型 | 說明 |
hasUpdate | Boolean | 是否有新的版本 |
知識點
知識點1
當用戶離開小程序時,小程序並沒有直接銷毀,而是進入了后台,當用戶再次進入小程序時,又會從后台進入前台。
只有當小程序進入后台一定時間后者系統資源占用過高,才會被真正的銷毀。
知識點2
小程序啟動分為“熱啟動”和“冷啟動”。
- 熱啟動指的是小程序打開后,在一段時間內(目前:5分鍾)再次被打卡,此時將后台小程序切換到前台。對應方法onShow。
- 冷啟動指的是小程序首次打開或銷毀后再次被打卡,對應函數onLaunch。
知識點3
- 冷啟動時,如果發現有新版本,將會異步下載新版本的代碼包,並同時用客戶端本地的包進行啟動,即新版本的小程序需要等下一次冷啟動才會應用上。
- 如果希望冷啟動后馬上使用最新版本,在App 的onLaunch生命周期中,調用用版本資源管理器uni.getUpdateManger()方法。
- 同理,希望每次打開小程序,都檢測更新,就使用onShow。
這樣看來,用代碼小程序中更新的方法不是必須的,就看你對版本更新的時效要求了。
知識點4
OnLaunch時間觸發在Onshow之前。
知識點5
在開發版和體驗版無法檢查版本更新。需要在開發者工具里,編譯時選擇“模擬更新編譯”。
打開方法。1)點擊菜單欄的添加編譯模式。2.勾選下次編譯時模擬更新。
參考網址
https://uniapp.dcloud.io/api/other/update?id=getupdatemanager
https://www.jianshu.com/p/ff711136544a