在做微信小程序的时候,深知版本更新的重要,对于微信小游戏自然也相当的重要。
那么怎么在微信小游戏里面实现强制更新版本呢?
小程序更新机制
未启动时更新
开发者在管理后台发布新版本的小程序之后,如果某个用户本地有小程序的历史版本,此时打开的可能还是旧版本。微信客户端会有若干个时机去检查本地缓存的小程序有没有更新版本,如果有则会静默更新到新版本。总的来说,开发者在后台发布新版本之后,无法立刻影响到所有现网用户,但最差情况下,也在发布之后 24 小时之内下发新版本信息到用户。用户下次打开时会先更新最新版本再打开。
启动时更新
小程序每次冷启动时,都会检查是否有更新版本,如果发现有新版本,将会异步下载新版本的代码包,并同时用客户端本地的包进行启动,即新版本的小程序需要等下一次冷启动才会应用上。
如果需要马上应用最新版本,可以使用 wx.getUpdateManager API 进行处理。
const updateManager = wx.getUpdateManager()
updateManager.onCheckForUpdate(function (res) {
// 请求完新版本信息的回调
console.log(res.hasUpdate)
})
updateManager.onUpdateReady(function () {
wx.showModal({
title: '更新提示',
content: '新版本已经准备好,是否重启应用?',
success(res) {
if (res.confirm) {
// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
updateManager.applyUpdate()
}
}
})
})
updateManager.onUpdateFailed(function () {
// 新版本下载失败
})
微信小游戏是有离线缓存的机制,也就是说如果这台手机之前玩过某个游戏,再打开游戏的时候是先加载启动手机本地缓存住的代码包,这个代码包是旧的,之后才会在后台向微信服务器下载最新的代码包。
微信小游戏上线后,新开发了一个功能或修复了一个重大Bug,想让用户打开游戏的时候就下载运行最新的代码包,而不是运行旧的代码包。
有没有解决办法呢?当然是有的!微信小游戏提供了一个 api wx.getUpdateManager() 来解决这个问题
核心方法:
UpdateManager.onCheckForUpdate(function callback)
监听该事件后微信向后台检查更新结果完会回调callback方法,如果有更新的版本,回调参数里hasUpdate属性为true。
微信在小程序冷启动时自动检查更新,不需由开发者主动触发。
UpdateManager.onUpdateReady(function callback)
监听该事件后微信下载完新版的代码包时会回调callback方法。客户端主动触发下载(无需开发者触发),下载成功后回调
UpdateManager.applyUpdate()
在onUpdateReady下载完新代码包后调用该方法强制小程序重启并使用新版本。
特别注意:
微信小游戏基础库 需要1.9.90以上版本才支持。针对老版本客户端需要做好兼容。
该更新机制只是在游戏冷启动的时候会触发,热启动的时候是不会进行更新判断的。
微信开发者工具上可以通过「编译模式」下的「下次编译模拟更新」开关来调试。
字节小游戏、QQ小游戏、百度小游戏的更新机制和微信小游戏是一样的。