小程序發(fā)布后箭启,某些用戶表示不能及時獲取到新版本乾颁。
參考文獻
更新機制:https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/update-mechanism.html
運行機制:https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/operating-mechanism.html
什么原因?qū)е滦〕绦驘o法自動更新涂乌?
開發(fā)者在后臺發(fā)布版本后,是不會立即更新到所有用戶的英岭。微信客戶端會有若干個時機去檢查是否存在新版本湾盒,并進行小程序代碼更新,但是本地如果存在舊版本诅妹,打開的還是舊版本罚勾。
這時候小程序只能等到下次冷啟動時才會打開最新版本毅人。
我們在使用小程序的時候 退出小程序后。小程序是不會立即被銷毀的尖殃。這個時候小程序只是被掛起了丈莺。掛起時間大概30分鐘未操作小程序。這時候小程序就會被銷毀送丰。再次打開就是所謂的冷啟動缔俄。
小程序在啟動時候分兩種情況
冷啟動:
如果用戶首次打開,或小程序銷毀后被用戶再次打開器躏,此時小程序需要重新加載啟動俐载,即冷啟動。
小程序在每次冷啟動的時候都會異步檢測是否存在新版本邀桑,如果有新版本的話將會異步下載瞎疼。但本次的啟動還是用的舊版代碼包,這樣就只能等到下一次冷啟動才會被應用上壁畸。
熱啟動:
如果用戶已經(jīng)打開過某小程序贼急,然后在一定時間內(nèi)再次打開該小程序,此時小程序并未被銷毀捏萍,只是從后臺狀態(tài)進入前臺狀態(tài)太抓,這個過程就是熱啟動。
解決方案:
wx.getUpdateManager
通過小程序每次打開后手動執(zhí)行更新檢測邏輯令杈;
邏輯實現(xiàn)
// 小程序啟動檢測更新服務
export default class WxUpdateService {
constructor() {
console.log('開始檢測小程序是否更新-----------------')
this.init();
}
init() {
//版本更新
if (wx.canIUse("getUpdateManager")) {
const updateManager = wx.getUpdateManager();
updateManager.onCheckForUpdate(function (res) {
// 請求完新版本信息的回調(diào)
if (res.hasUpdate) {
updateManager.onUpdateReady(function () {
wx.showModal({
title: "更新提示",
content: "新版本已經(jīng)準備好走敌,是否重啟應用?",
success: function (res) {
console.log("success====", res);
if (res.confirm) {
// 新的版本已經(jīng)下載好逗噩,調(diào)用 applyUpdate 應用新版本并重啟
updateManager.applyUpdate();
} else if (res.cancel) {
//用戶點擊取消按鈕的處理掉丽,如果需要強制更新,則給出二次彈窗异雁,如果不需要捶障,則這里的代碼都可以刪掉了
wx.showModal({
title: "溫馨提示~",
content: "本次版本更新涉及到新的功能添加,舊版本將無法正常訪問",
showCancel: false, //隱藏取消按鈕
confirmText: "確定更新", //只保留確定更新按鈕
success: function (res) {
if (res.confirm) {
updateManager.applyUpdate();
}
},
});
}
},
});
});
updateManager.onUpdateFailed(function () {
// 新的版本下載失敗
wx.showModal({
title: "新版本提醒",
content: "檢測到新版本纲刀,請您刪除當前小程序重新搜索打開项炼!",
});
});
}
});
}
}
}
app.js onLaunch 中調(diào)用
import WxUpdateService from '@/code/service/wx-update-service.js'; // 小程序更新檢測機制引入
async onLaunch() {
// 小程序更新檢測
new WxUpdateService();
},
小程序在用戶每次打開的時候 都會進行檢測。給用戶帶來良好體驗~