小程序实战(十七)-版本自动更新

981 阅读2分钟

一、需求说明

  1. 目前出现情况:每次发布新版本,如果用户正在使用小程序,都需要让用户将小程序销毁再重新启动,才能使用最新版本的代码
  2. 希望当小程序版本更新后,用户打开小程序时自动检查是否有新版本,若有,则提示用户是否更新

二、需求实现

2.1 冷启动和热启动

用户打开小程序时有两种启动方式:

  • 冷启动:若用户首次打开,或小程序销毁后被再次打开,此时需要重新加载,会检查当前最新版本的代码,并运行。
  • 热启动:如果用户已经打开过小程序,且在一定时间内再次打开,此时小程序并未被销毁,并不会检查最新代码。

2.2 热启动时实现版本更新

使用微信官方提供的 api 来检查并更新版本: 一般会将代码写在 app.js 的 onLaunch 函数中,在打开小程序时就执行

App({
    onLaunch() {
	// 判断是否能用这个 api
	if (wx.canIUse('getUpdateManager')) {
     		// 创建 updateManager 实例
		const updateManager = wx.getUpdateManager()
     		 // 检查是否有新版本
		updateManager.onCheckForUpdate(function(res) {
        		// hasUpdate 指是否有新版本,为 boolean 值
			if (res.hasUpdate) {
				updateManager.onUpdateReady(function() {
					wx.showModal({
						title: '更新提示',
						content: '新版本已经准备好,是否重启应用?',
						success: function(res) {
							if (res.confirm) {
                  						// 强制更新版本
								updateManager.applyUpdate()
							}
						}
					})
				}),
				updateManager.onUpdateFailed(function() {
					wx.showModal({
						title: '已经有新版本了',
						content: '新版本已经上线啦~,请您删除当前小程序,重新搜索打开'
					})
				})
			}
		})
	} else {
		wx.showModal({
		    title: '提示',
		    content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。'
		})
	}
    }
})

附上用到的几个 api 说明:

  1. UpdateManager.onCheckForUpdate()

  2. UpdateManager.onUpdateReady()

  3. UpdateManager.applyUpdate()

<关于我们>

我们是来自帝都的一枚前端程序猿 + 一枚前端程序媛。

这里发布的文章是我们对学习内容的总结,预计会每周至少会更新一篇。

目前我们学习计划是: 小程序实战 => vue 进阶用法 => vue 原理 => css 基础 => es6 => js 深入

另外,工作中用到的一些技术和完成的功能,我们也会及时总结更新在这里

如文章有错误或表述不清晰,欢迎各位留言反馈~~