admin管理员组文章数量:1558103
我们都知道,微信小游戏是有离线缓存的机制,也就是说如果这台手机之前玩过某个游戏,再打开游戏的时候是先加载启动手机本地缓存住的代码包,这个代码包是旧的,之后才会在后台向微信服务器下载最新的代码包。
我们会遇到这样的需求,微信小游戏上线后,新开发了一个功能或修复了一个重大Bug,想让用户打开游戏的时候就下载运行最新的代码包,而不是运行旧的代码包。
有没有解决办法呢?当然是有的!微信小游戏提供了一个 api wx.getUpdateManager() 来解决这个问题
核心方法:
UpdateManager.onCheckForUpdate(function callback)
监听该事件后微信向后台检查更新结果完会回调callback方法,如果有更新的版本,回调参数里hasUpdate属性为true。微信在小程序冷启动时自动检查更新,不需由开发者主动触发。
UpdateManager.onUpdateReady(function callback)
监听该事件后微信下载完新版的代码包时会回调callback方法。客户端主动触发下载(无需开发者触发),下载成功后回调
UpdateManager.applyUpdate()
在onUpdateReady下载完新代码包后调用该方法强制小程序重启并使用新版本。
下面上代码:
if(window["wx"].getUpdateManager){
const updateManager = window["wx"].getUpdateManager()
updateManager.onCheckForUpdate(function (res) {
// 请求完新版本信息的回调
if(res.hasUpdate){
//如果内存卡有存储游戏相关的离线文件,在更新版本的时候需要清除,避免废文件越来越多
window["clearTempCache"] && window["clearTempCache"]();
window["wx"].showToast({icon:"none", title:"有新版本了,正在下载中..", duration: 600000});//10分钟
}
})
updateManager.onUpdateFailed(function () {
window["wx"].hideToast();
window["wx"].showModal({
content: '新版本下载失败了,点击确定重启游戏',
title: '更新提示',
showCancel: false,
success: function (res) {
window["wx"].exitMiniProgram();
}
})
})
updateManager.onUpdateReady(function () {
window["wx"].hideToast();
window["wx"].showModal({
content: '新版本已经准备好了,点击确定重启应用',
title: '更新提示',
showCancel: false,
success: function (res) {
if (res.confirm) {
// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
updateManager.applyUpdate()
}
}
})
})
}
特别注意:
- 微信小游戏基础库 需要1.9.90以上版本才支持。针对老版本客户端需要做好兼容。
- 该更新机制只是在游戏冷启动的时候会触发,热启动的时候是不会进行更新判断的。冷热启动机制详细介绍 请看这里
- 微信开发者工具上可以通过「编译模式」下的「下次编译模拟更新」开关来调试。
- 小程序开发版/体验版没有「版本」概念,所以无法在开发版/体验版上测试更版本更新情况,只能在正式版线上验证。
- 字节小游戏、QQ小游戏、百度小游戏的更新机制和微信小游戏是一样的,故以上代码完全支持这几个平台。
版权声明:本文标题:微信小游戏(字节小游戏、QQ小游戏)如何实现强制更新版本 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1727356694a1110188.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论