1,前言

最近开发小程序时候碰上了一个问题,当发布新版本小程序后,需要用户能赶紧用上最新的,避免出问题。查了一下官方文档,总结出几个情况如下:

  1. 微信运行时,会定期(24小时内)检查最近使用的小程序是否有更新(黄花菜都凉了)
  2. 用户长时间未使用小程序时,会强制同步检查版本更新(对于使用频率高的小程序没P用)
  3. 小程序每次冷启动时,都会异步检查是否有更新版本(本次不生效,下次冷启动才生效)

这里科普一下什么是冷启动和热启动

  • 冷启动:用户首次打开,或小程序销毁后被用户再次打开,此时小程序需要重新加载
  • 热启动:用户已经打开过某小程序,然后在一定时间内(30分钟)再次打开该小程序,此时小程序并未被销毁,只是从后台状态进入前台状态

2,解决方案

通过查询文档和网上冲浪,最终解决方案是在app.js的onShow生命周期里检查是否有新版本,如果有的话,就异步下载,下载完毕弹窗提示用户更新,代码如下:

const updateManager = uni.getUpdateManager()
onShow() {
// 请求完新版本信息的回调
updateManager.onCheckForUpdate(res => {
if (res.hasUpdate) {
// 新版本下载成功
updateManager.onUpdateReady(() => {
uni.showModal({
title: '更新提示',
content: '新版本已经准备好,点击确定重启小程序',
success(res) {
if (res.confirm) {
// 新的版本已经下载好,强制更新
updateManager.applyUpdate()
}
}
})
})
}
})
// 新版本下载失败
updateManager.onUpdateFailed(res => {
console.error(res)
})
}

3,调试须知

  • 小程序开发版/体验版没有版本概念,所以无法在开发版/体验版上测试更版本更新情况
  • 微信开发者工具上可以通过编译模式中勾选下次编译模拟更新开关来调试


如果看了觉得有帮助的,我是@上进的鹏多多,欢迎 点赞 关注 评论;END


PS:在本页按F12,在console中输入document.querySelectorAll('.diggit')[0].click(),有惊喜哦


公众号

往期文章

个人主页

最新文章

  1. undefined reference to `_init'问题解决
  2. android开发--多线程
  3. supersr--九宫格公式(根据多少行多少列排版)
  4. [转]Android 超高仿微信图片选择器 图片该这么加载
  5. 来说说SpringMVC + JSONP的跨域请求
  6. BZOJ2121 字符串游戏
  7. 在Sql Server 查询分析器里使用事务
  8. leetcode@ [68] Text Justification (String Manipulation)
  9. JavaScript的基本类型总结
  10. 笔记本开临时Wifi
  11. ClickOnce发布注意的一些细节
  12. Android---->RelativeLayout相对对齐方式布局
  13. 编译安装mysql-server5.6.32手记
  14. Bootstrap -- 初见 Bootstrap
  15. 学习笔记77—Iphone集
  16. Confluence 6 复杂授权或性能问题
  17. 实战ELK(3) Kibana安装与简单实用
  18. easyui---form表单_validatebox验证框
  19. mo系统常用语句
  20. Visual C++实现局域网IP多播

热门文章

  1. 使用docker创建和运行跨平台的容器化的mssql数据库
  2. 用C语言实现井字棋(人人/AI人机)--完结版
  3. Lombok - 快速入门
  4. centos6搭建mysql
  5. 分享一个基于 netty 的 java 开源项目
  6. 关于vue项目中搜索节流的实现
  7. SAP Web Dynpro-使用服务调用
  8. React技巧之发出http请求
  9. Pyinstaller打包pikepdf失败的问题排查
  10. MySQL数据检索时,sql查询的结果如何加上序号