小游戏如何实现强制更新版本

684 阅读3分钟

本文介绍的方法同样适用于QQ小游戏、字节小游戏、以及vivo、oppo小游戏等等。

我们都知道,微信小游戏是有离线缓存的机制,也就是说如果这台手机之前玩过某个游戏,再打开游戏的时候是先加载启动手机本地缓存住的代码包,这个代码包是旧的,之后才会在后台向微信服务器下载最新的代码包。

我们会遇到这样的需求,微信小游戏上线后,新开发了一个功能或修复了一个重大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. 微信小游戏基础库 需要1.9.90以上版本才支持。针对老版本客户端需要做好兼容。
  2. 该更新机制只是在游戏冷启动的时候会触发,热启动的时候是不会进行更新判断的。冷热启动机制详细介绍 请看这里
  3. 微信开发者工具上可以通过「编译模式」下的「下次编译模拟更新」开关来调试。
  4. 小程序开发版/体验版没有「版本」概念,所以无法在开发版/体验版上测试更版本更新情况,只能在正式版线上验证。
  5. 字节小游戏、QQ小游戏、百度小游戏的更新机制和微信小游戏是一样的,故以上代码完全支持这几个平台。