小程序更新处理逻辑

409 阅读3分钟

小程序更新机制

开发者在管理后台发布新版本的小程序之后,微信客户端会有若干个时机去检查本地缓存的小程序有没有新版本,并进行小程序的代码包更新。但如果用户本地有小程序的历史版本,此时打开的可能还是旧版本。

未启动时更新

微信运行时,会定期检查最近使用的小程序是否有更新。如果有更新,下次小程序启动时会同步进行更新,更新到最新版本后再打开小程序,尽可能保证用户能够尽快使用小程序的最新版本。

总的来说,开发者在后台发布新版本之后,无法立刻影响到所有现网用户,但最差情况下,也在发布之后 24 小时之内覆盖绝大多数用户。

这种更新用户是没有感知的,即使调版本控制接口也不会弹出更新提示(调接口时小程序已经是最新版本)。

启动时更新

即使启动前未发现更新,小程序每次冷启动时,都会异步检查是否有更新版本。如果发现有新版本,将会异步下载新版本的代码包。但当次启动仍会使用客户端本地的旧版本代码,即新版本的小程序需要等下一次冷启动才会应用上。(如果需要马上应用最新版本,可以使用 wx.getUpdateManager API 进行处理)

不处理的话,默认冷启动时发现更新后,下次冷启动才会更新到最新版本(无感知)。


* 结合版本控制接口

流程

启动时(onLaunch)异步调用版本控制接口(不阻塞后续代码逻辑)

→ 有更新,调用wx.getUpdateManager()(返回res.hasUpdate)

→ 检测到新版本:更新下载成功后弹出更新提示(根据接口返回是否强制更新判断是否显示弹窗的取消按钮);更新下载失败(可能是网络原因等)弹出自动更新失败提示,引导用户手动更新;

→ 没检测到新版本(接口提示有更新但是小程序没检测到新版本的情况):强更的话提示用户更新失败,引导手动操作但是可以取消;非强更则不提示。

→ 没有更新,按小程序自带的更新机制处理。

→ 调用失败,隔10秒再次调用。

总结

小程序后台发布新版本后,无论放新买后台是否添加新版本控制,小程序最终都会更新到新版(走自带的更新机制,可能不及时);通过添加版本控制,增加主动检查更新的逻辑,可及时提示用户更新或强制更新。

参考:

  1. 小程序生命周期示意图

  1. 小程序更新机制 | 微信开放文档 (qq.com)