更新问题

微信小程序遇到新版本发布后,旧版本无法自动更新的困扰.
我之前进行开发的时候:

最笨的方法就是,删除小程序后再重新搜索打开就好;
注意:准确来讲,版本自动更新的方法越早进行补充越合理,
尤其适合前期使用人数较少的时候就做补充
以避免后期使用人数太多时而旧版本依然无法检测更新及时替换的情况

实现方案

1.小程序的运行机制

热启动:小程序打开后在一段时间内(目前5分钟)再次被打开,此时会将后台的小程序切换到前台。冷启动:小程序首次打开或者销毁后重新打开

2.更新版本

冷启动时,如果发现有新版本,将会异步下载新版本的代码包,并同时用客户端本地的包进行启动,及新版本的小程序需要等下一次冷启动才会应用上;
如果马上应用最新版本,使用wx.getUpdateManager API进行处理。

一、需求说明

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

二、需求实现

2.1 冷启动和热启动

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

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

2.2 热启动时实现版本更新

使用微信官方提供的 api 来检查并更新版本:

一般会将代码写在 app.js 的 onLaunch 函数中,在打开小程序时就执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
   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: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。'
})
}
}
})

注意:在开发和体验版无法测试版本更新

需要在开发者工具里,编译时选择”模拟更新编译”

(部分开发者工具版本, 每次update编译时都需要重新勾选此选项)
点击确定,重新编译.

页面会弹窗显示:

点击确定后:

随着小程序的不断更新, 部分功能可能需要最新版的微信客户端才能使用. 这时候可以弹窗提示用户更新到最新版本微信