收藏
回答

小程序wx.getUpdateManager触发onCheckForUpdate要满足哪些条件?

已经看了小程序的更新机制,但问题依旧如下:

背景是小程序迭代了多次(基础库是3.10.3),反馈一次弹窗更新提示也没收到。于是特意用另一个小程序log测试了下,测试代码如下:

第一个版本先把log加上,v1.1.1

async onShow(e){
  updateProgram();
},
methods: {
  updateProgram(){
	const updateManager = wx.getUpdateManager();
	//监听向微信后台请求检查更新结果
	updateManager.onCheckForUpdate(function (res) {
        addLog("版本更新:检查更新结果"+res.hasUpdate);
          console.log("版本更新:"+res.hasUpdate)
	})

	//客户端主动触发下载,下载成功后回调
	updateManager.onUpdateReady(function () {
        addLog("版本更新:下载成功");
    	    wx.showModal({
    		title: '更新提示',
    		content: '新版本已经准备好,是否重启应用?',
    		success: function (res) {
      		if (res.confirm) {
            		//新的版本已经下载好,调用 applyUpdate 应用新版本并重启
            		updateManager.applyUpdate()
      		}
    		}
      	     })
	})
	//新版本下载失败
	updateManager.onUpdateFailed(function () {
          addLog("版本更新:下载失败");
		uni.showModal({
			title: '更新提示',
			content: '请您删除当前小程序,重新搜索打开',
			});
		})
	}
}


上个版本(v1.1.1)发布后,v1.1.2在onShow里加行日志

async onShow(e){
  addLog("小程序启动onShow");
  updateProgram();
},
methods: {
  updateProgram(){
	const updateManager = wx.getUpdateManager();
	//监听向微信后台请求检查更新结果
	updateManager.onCheckForUpdate(function (res) {
        addLog("版本更新:检查更新结果"+res.hasUpdate);
          console.log("版本更新:"+res.hasUpdate)
	})

	//客户端主动触发下载,下载成功后回调
	updateManager.onUpdateReady(function () {
        addLog("版本更新:下载成功");
    	    wx.showModal({
    		title: '更新提示',
    		content: '新版本已经准备好,是否重启应用?',
    		success: function (res) {
      		if (res.confirm) {
            		//新的版本已经下载好,调用 applyUpdate 应用新版本并重启
            		updateManager.applyUpdate()
      		}
    		}
      	     })
	})
	//新版本下载失败
	updateManager.onUpdateFailed(function () {
          addLog("版本更新:下载失败");
		uni.showModal({
			title: '更新提示',
			content: '请您删除当前小程序,重新搜索打开',
			});
		})
	}
}


两个版本更新相隔7个小时,v1.1.2发布之后期望效果:

从小程序最近列表(没有删除)打开小程序,能看看到版本更新提示的弹窗。但始终没看到,从日志看res.hasUpdate返回false,但看到了“小程序启动onShow”。推测当前使用小程序已经更新到v1.1.2了。

问题:

1、微信更新小程序到最新版本后,本地端缓存数据是不是还在?

2、如果要触发onUpdateReady,需要满足哪些条件,才能执行?

回答关注问题邀请回答
收藏

4 个回答

  • 启年
    启年
    2025-10-30

    以我的经验来讲,最近的更新功能,是优化过了的,更新迭代的速度是很快的。

    开发者写上这段代码,基本不需要管这部分。


    用户使用过程中,如果有新版,用户会很快提示有更新。

    如果用户小程序不在前台,在后台的时候,会自动默默更新

    更新版本,storage缓存还在

    现在的更新时效性和体验,最近应该是优化过,比以前强。


    最后,如果想快速把新版本上线给所有用户,发版之后,在设置里边配置最新版本为最低可用版本。效果非常棒。

    2025-10-30
    有用 3
    回复 2
    • 何晓亮
      何晓亮
      2025-10-30
      默默更新版本,是不是不执行onUpdateReady了。如果新版需要清除本地缓存怎么处理。有没有办法手动执行重新打开小程序的api啊
      2025-10-30
      回复
    • 启年
      启年
      2025-10-30回复何晓亮
      如果需要清除缓存,你这个版本更新的时候,可以加一部分代码来控制。在小程序启动开始的时候,检查当前版本是多少,是否需要清理指定的缓存代码
      2025-10-30
      2
      回复
  • 啊哈
    啊哈
    2025-10-30

    从我这边实际体验来看,微信小程序这个手动更新的机制一直有点迷,有时候版本发布之后,要删除几次才能看到手动更新的弹出,有时候重启一下就自动更新了,都不会出现手动更新的弹窗。 反正就只能把手动更新的功能加上,随缘了。

    1、版本更新后,只要没自己做逻辑改动storage缓存或者清除缓存、删除小程序之类的操作,之前版本的storage缓存信息不会变化;

    2、要验证手动更新代码是否正确的话,可以在开发工具添加编译模式时,勾选上“下次编译时模拟更新”选项。

    2025-10-30
    有用
    回复 1
    • 何晓亮
      何晓亮
      2025-10-30
      好的,谢谢
      2025-10-30
      回复
  • 跨商通
    跨商通
    2025-10-30

    反馈一次弹窗更新提示也没收到。

    想测试手动等待着弹窗出现,基本是不行的。

    这个功能的代码写上了,发布出去后,可以就不用管它了。

    想在小程序端做测试,基本是不行的。

    非要测试的话,在updateManager.applyUpdate()前后

    埋一条代码给后台发送一条消息,来捕捉这条语句是否执行了。

    2025-10-30
    有用
    回复
  • 智能回答 智能回答 本次回答由AI生成
    2025-10-30
    有用
登录 后发表内容