我们在 uni-app 开发小程序的时候,小程序更新版本后,由于小程序客户端是异步更新,新版本覆盖较慢。因此如果用户之前已经打开过该小程序,那么通过 热启动 再进入小程序时,可能访问的还是旧版本,需要一段时间才能更新。但是如果小程序存在严重 bug 需要用户强制升级,那该怎么办呢?办法总是有的,直接上代码:

在项目根路径下的 App.vue 文件 onLaunch 中增加如下代码:

onLaunch: function() {
    // #ifdef MP
    this.mpUpdate()
    // #endif
}
methods: {
    mpUpdate() {
        const updateManager = uni.getUpdateManager() // 小程序版本更新管理器
                
        updateManager.onCheckForUpdate(res => { // 检测新版本后的回调
            if(res.hasUpdate) { // 如果有新版本提醒并进行强制升级
                uni.showModal({
                    content: '发现新版本',
                    showCancel: false,
                    confirmText: '升级',
                    success: res => {
                        if (res.confirm) {
                            updateManager.onUpdateReady(res => { // 新版本下载完成的回调
                                updateManager.applyUpdate() // 强制当前小程序应用上新版本并重启
                            })
                              
                            updateManager.onUpdateFailed(res => { // 新版本下载失败的回调
                                // 新版本下载失败,提示用户删除后通过冷启动重新打开
                                uni.showModal({
                                    content: '下载失败,请删除当前小程序后重新打开',
                                    showCancel: false,
                                    confirmText: '知道了'
                                })
                            })
                        }
                    }
                })
            }
        })        
    }
}

官方文档:
uni-app 小程序更新官方文档

小程序启动方式小贴士:

  • 冷启动:指用户首次打开或小程序被微信主动销毁后再次打开,此时小程序需要重新加载启动。
  • 热启动:指用户已经打开过某小程序,然后在一定时间内再次打开该小程序,此时无需重新启动,只需将后台态的小程序切换到前台,这个过程并不会重新加载启动。