小程序的更新機制
開發者在管理后台發布新版本的小程序之后,如果某個用戶本地有小程序的歷史版本,此時打開的可能還是舊版本。微信客戶端會有若干個時機去檢查本地緩存的小程序有沒有更新版本,如果有則會靜默更新到新版本。總的來說,開發者在后台發布新版本之后,無法立刻影響到所有現網用戶,但最差情況下,也在發布之后 24 小時之內下發新版本信息到用戶。用戶下次打開時會先更新最新版本再打開。
啟動時更新
小程序每次冷啟動時,都會檢查是否有更新版本,如果發現有新版本,將會異步下載新版本的代碼包,並同時用客戶端本地的包進行啟動,即新版本的小程序需要等下一次冷啟動才會應用上。
關於冷/熱啟動及前/后台的概念,請參照小程序文檔運行機制
可以通過wx.getUpdsateManager
API來強制用戶在啟動時更新新版本。
wx.showLoading({
title: '加載中..',
mask: true
})
const updateManager = wx.getUpdateManager()
updateManager.onCheckForUpdate(function (res) {
// 請求完新版本信息的回調
console.log('是否有新版本: ', + res.hasUpdate)
if (!res.hasUpdate) {
wx.hideLoading()
}
})
updateManager.onUpdateReady(function () {
wx.hideLoading()
wx.showModal({
title: '更新提示',
content: '新版本已經准備好,是否重啟應用?',
showCancel: false,
success: function (res) {
if (res.confirm) {
// 新的版本已經下載好,調用 applyUpdate 應用新版本並重啟
updateManager.applyUpdate()
}
}
})
})
updateManager.onUpdateFailed(function () {
wx.hideLoading();
wx.showModal({
title: '提示',
content: '檢查到有新版本,但下載失敗,請檢查網絡后重試',
showCancel: false
})
})
setTimeout(wx.hideLoading, 5000)
由於onCheckForUpdate
在檢查新版本的時候會存在一定的延遲(在開發工具上大概4秒左右),為防止在檢查新版本過程中用戶觸發操作跳出首頁,添加了一個wx.showLoading
進行遮蓋。
需要注意,上面的代碼更新到新版本后也是不會立即生效的,所以還是需要用戶進行一次冷啟動。
參考:https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/update-mechanism.html