已经看了小程序的更新机制,但问题依旧如下:
背景是小程序迭代了多次(基础库是3.10.3),反馈一次弹窗更新提示也没收到。于是特意用另一个小程序log测试了下,测试代码如下:
第一个版本先把log加上,v1.1.1
async onShow(e){
updateProgram();
},
methods: {
updateProgram(){
const updateManager = wx.getUpdateManager();
//监听向微信后台请求检查更新结果
updateManager.onCheckForUpdate(function (res) {
addLog("版本更新:检查更新结果"+res.hasUpdate);
console.log("版本更新:"+res.hasUpdate)
})
//客户端主动触发下载,下载成功后回调
updateManager.onUpdateReady(function () {
addLog("版本更新:下载成功");
wx.showModal({
title: '更新提示',
content: '新版本已经准备好,是否重启应用?',
success: function (res) {
if (res.confirm) {
//新的版本已经下载好,调用 applyUpdate 应用新版本并重启
updateManager.applyUpdate()
}
}
})
})
//新版本下载失败
updateManager.onUpdateFailed(function () {
addLog("版本更新:下载失败");
uni.showModal({
title: '更新提示',
content: '请您删除当前小程序,重新搜索打开',
});
})
}
}
上个版本(v1.1.1)发布后,v1.1.2在onShow里加行日志
async onShow(e){
addLog("小程序启动onShow");
updateProgram();
},
methods: {
updateProgram(){
const updateManager = wx.getUpdateManager();
//监听向微信后台请求检查更新结果
updateManager.onCheckForUpdate(function (res) {
addLog("版本更新:检查更新结果"+res.hasUpdate);
console.log("版本更新:"+res.hasUpdate)
})
//客户端主动触发下载,下载成功后回调
updateManager.onUpdateReady(function () {
addLog("版本更新:下载成功");
wx.showModal({
title: '更新提示',
content: '新版本已经准备好,是否重启应用?',
success: function (res) {
if (res.confirm) {
//新的版本已经下载好,调用 applyUpdate 应用新版本并重启
updateManager.applyUpdate()
}
}
})
})
//新版本下载失败
updateManager.onUpdateFailed(function () {
addLog("版本更新:下载失败");
uni.showModal({
title: '更新提示',
content: '请您删除当前小程序,重新搜索打开',
});
})
}
}
两个版本更新相隔7个小时,v1.1.2发布之后期望效果:
从小程序最近列表(没有删除)打开小程序,能看看到版本更新提示的弹窗。但始终没看到,从日志看res.hasUpdate返回false,但看到了“小程序启动onShow”。推测当前使用小程序已经更新到v1.1.2了。
问题:
1、微信更新小程序到最新版本后,本地端缓存数据是不是还在?
2、如果要触发onUpdateReady,需要满足哪些条件,才能执行?

以我的经验来讲,最近的更新功能,是优化过了的,更新迭代的速度是很快的。
开发者写上这段代码,基本不需要管这部分。
用户使用过程中,如果有新版,用户会很快提示有更新。
如果用户小程序不在前台,在后台的时候,会自动默默更新
更新版本,storage缓存还在
现在的更新时效性和体验,最近应该是优化过,比以前强。
最后,如果想快速把新版本上线给所有用户,发版之后,在设置里边配置最新版本为最低可用版本。效果非常棒。
从我这边实际体验来看,微信小程序这个手动更新的机制一直有点迷,有时候版本发布之后,要删除几次才能看到手动更新的弹出,有时候重启一下就自动更新了,都不会出现手动更新的弹窗。 反正就只能把手动更新的功能加上,随缘了。
1、版本更新后,只要没自己做逻辑改动storage缓存或者清除缓存、删除小程序之类的操作,之前版本的storage缓存信息不会变化;
2、要验证手动更新代码是否正确的话,可以在开发工具添加编译模式时,勾选上“下次编译时模拟更新”选项。
“反馈一次弹窗更新提示也没收到。”
想测试手动等待着弹窗出现,基本是不行的。
这个功能的代码写上了,发布出去后,可以就不用管它了。
想在小程序端做测试,基本是不行的。
非要测试的话,在updateManager.applyUpdate()前后
埋一条代码给后台发送一条消息,来捕捉这条语句是否执行了。