? 背景
涉及到微信小程序開發(fā)的小伙伴們,相信一定會(huì)遇到新版本發(fā)布后,舊版本無(wú)法自動(dòng)更新的困擾.
- 我之前進(jìn)行開發(fā)的時(shí)候:
- 首先是因?yàn)樵诮衲甑?3临燃、4月份進(jìn)行小程序的初次接觸;
- 但是網(wǎng)上也沒搜到相關(guān)的解決方案;
- 最笨的方法就是蓝仲,刪除小程序后再重新搜索打開就好;
- 然后,記不清從哪里看到的信息;
- 大概意思是:小程序的更新機(jī)制會(huì)自動(dòng)檢測(cè)粱甫,根據(jù)手機(jī)的緩存程度不同,一般最遲兩個(gè)小時(shí)就能自動(dòng)替換
- 所以就有點(diǎn)不了了之了
W髅椤2柘!(真實(shí)情況是宗挥,在之前進(jìn)行版本發(fā)布后乌庶,有的iphone手機(jī),即便一天之后進(jìn)入契耿,依然是舊版本瞒大,根本不會(huì)自動(dòng)更新替換好吧)!O埂糠赦!
- 今天無(wú)意中又想到這個(gè)問題,再進(jìn)行百度锅棕,發(fā)現(xiàn)很多道友給出解決方案了拙泽;
- 我猜測(cè)是這段時(shí)間官方進(jìn)行了功能補(bǔ)充,亦或者是道友們的深層挖掘吧裸燎;
- 在此進(jìn)行一下整理顾瞻,希望能幫到更多的朋友...
?實(shí)現(xiàn)方案
首先,你必須要了解一下 小程序 - 運(yùn)行機(jī)制
然后根據(jù)文檔指導(dǎo)德绿,自然而然就會(huì)進(jìn)入到 UpdateManager 對(duì)象 的介紹與使用
- 我根據(jù)官方提供的示例及其他道友的文章參考荷荤,最后進(jìn)行了如下代碼整合 : >>>
/**
* 檢測(cè)當(dāng)前的小程序
* 是否是最新版本退渗,是否需要下載、更新
*/
function checkUpdateVersion() {
//創(chuàng)建 UpdateManager 實(shí)例
const updateManager = wx.getUpdateManager();
//檢測(cè)版本更新
updateManager.onCheckForUpdate(function(res) {
// 請(qǐng)求完新版本信息的回調(diào)
if (res.hasUpdate) {
//監(jiān)聽小程序有版本更新事件
updateManager.onUpdateReady(function() {
wx.showModal({
title: '更新提示',
content: '新版本已經(jīng)準(zhǔn)備好蕴纳,是否重啟應(yīng)用会油?',
success(res) {
if (res.confirm) {
// 新的版本已經(jīng)下載好,調(diào)用 applyUpdate 應(yīng)用新版本并重啟
updateManager.applyUpdate();
}
}
})
})
updateManager.onUpdateFailed(function() {
// 新版本下載失敗
wx.showModal({
title: '已經(jīng)有新版本咯~',
content: '請(qǐng)您刪除當(dāng)前小程序古毛,到微信 “發(fā)現(xiàn)-小程序” 頁(yè)翻翩,重新搜索打開呦~',
})
})
}
})
}
? 具體使用
根據(jù)小程序的運(yùn)行機(jī)制,適合在啟動(dòng)時(shí)就進(jìn)行版本檢測(cè)的操作
- 所以稻薇,可以在
app.js
的onLaunch()
方法中進(jìn)行調(diào)用 上面的checkUpdateVersion()
-
運(yùn)行效果截圖:
Tips:
1. 小程序開發(fā)版/體驗(yàn)版沒有「版本」概念嫂冻,所以無(wú)法在開發(fā)版/體驗(yàn)版上測(cè)試更版本更新情況
2. 準(zhǔn)確來(lái)講,版本自動(dòng)更新的方法越早進(jìn)行補(bǔ)充越合理塞椎,
尤其適合前期使用人數(shù)較少的時(shí)候就做補(bǔ)充
以避免后期使用人數(shù)太多時(shí)而舊版本依然無(wú)法檢測(cè)更新及時(shí)替換的情況
- 補(bǔ)充
考慮再三桨仿,為了版本的統(tǒng)一化,當(dāng)然是建議小程序可以自動(dòng)更新案狠,所以升級(jí)一下代碼如下:
- 建議可以對(duì)比兩種寫法服傍,找找不同...
/**
* 檢測(cè)當(dāng)前的小程序
* 是否是最新版本,是否需要下載莺戒、更新
*/
function checkUpdateVersion() {
//判斷微信版本是否 兼容小程序更新機(jī)制API的使用
if (wx.canIUse('getUpdateManager')) {
//創(chuàng)建 UpdateManager 實(shí)例
const updateManager = wx.getUpdateManager();
//檢測(cè)版本更新
updateManager.onCheckForUpdate(function(res) {
// 請(qǐng)求完新版本信息的回調(diào)
if (res.hasUpdate) {
//監(jiān)聽小程序有版本更新事件
updateManager.onUpdateReady(function() {
//TODO 新的版本已經(jīng)下載好伴嗡,調(diào)用 applyUpdate 應(yīng)用新版本并重啟 ( 此處進(jìn)行了自動(dòng)更新操作)
updateManager.applyUpdate();
})
updateManager.onUpdateFailed(function() {
// 新版本下載失敗
wx.showModal({
title: '已經(jīng)有新版本嘍~',
content: '請(qǐng)您刪除當(dāng)前小程序急波,到微信 “發(fā)現(xiàn)-小程序” 頁(yè)从铲,重新搜索打開哦~',
})
})
}
})
} else {
//TODO 此時(shí)微信版本太低(一般而言版本都是支持的)
wx.showModal({
title: '溫馨提示',
content: '當(dāng)前微信版本過(guò)低,無(wú)法使用該功能澄暮,請(qǐng)升級(jí)到最新微信版本后重試名段。'
})
}
}