编辑器里强制更新会有弹窗,但是实机没有
代码直接写在进游戏里的onload里面:
//检查更新
var updateManager = wx.getUpdateManager();
updateManager.onCheckForUpdate(function (res) {
// 请求完新版本信息的回调
// console.log(res.hasUpdate)
})
updateManager.onUpdateReady(function () {
wx.showModal({
title: '更新提示',
content: '新版本已经准备好,是否重启应用?',
showCancel : false,
success: function (res) {
if (res.confirm) {
// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
updateManager.applyUpdate()
}
}
})
})
updateManager.onUpdateFailed(function () {
// 新版本下载失败
})
你好,请具体描述问题出现的流程,并提供能复现问题的简单代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)。
强制更新成功了,把wx.showModal 删掉,直接强制更新就好了。实机测试 会弹出 更新提示框的。
但玩家反馈会有丢档的情况。重新启动后就好了。
别的开发者也反馈了这个问题https://developers.weixin.qq.com/community/develop/doc/000e6e6b938d302d0d79e7e5651000?highLine=updateManager
updateNewVersion () {
//检查更新
const updateManager = wx.getUpdateManager();
updateManager.onCheckForUpdate(function (res) {
// 请求完新版本信息的回调
// console.log(res.hasUpdate)
})
updateManager.onUpdateReady(function () {
//此处直接强制更新,不需要弹窗,实机测试会有弹窗,不用担心
updateManager.applyUpdate()
})
updateManager.onUpdateFailed(function () {
// 新版本下载失败
console.log('新版本下载失败')
})
},
这个问题有意思,试了一下,在模拟器中也可以复现,如下所示。
微信在为小程序启动准备运行环境时,其中有一项是准备一个新的进程,LocalStorage应该是跟着进程走了,一个进程一个本地缓存。当新版本强制启动时,是杀死了当前的进程,用下载好的新版本启动了新进程,之前进程里的缓存也就取不到了。
进程之间还不好共享缓存,且不说好不好做能不能实现;如果这样做了,安全性又受到了挑战,万一小程序A意外访问到了小程序B的缓存了怎么办。
所以想到一个妥协的解决办法,是不是可以这样: