专栏首页国产程序员微信小程序版本自动更新

微信小程序版本自动更新

公司的小程序项目上线, 后期还会有小型的版本迭代. 为了让用户能在我们进行版本迭代后及时使用最新版本的功能. 做了以下优化..

当用户点击左上角关闭,或者按了设备Home 键离开微信,小程序并没有直接销毁,而是进入了后台;

当再次进入微信或再次打开小程序,又会从后台进入前台,只有当小程序进入后台一定时间,或者系统资源占用过高,才会被真正的销毁。

小程序的启动分为"冷启动" 和 "热启动".

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

更新版本

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

代码如下

// 在app.js里写下以下代码
  onLaunch () {
    if (wx.canIUse('getUpdateManager')) {
      const updateManager = wx.getUpdateManager()
      updateManager.onCheckForUpdate(function (res) {
        console.log('onCheckForUpdate====', res)
        // 请求完新版本信息的回调
        if (res.hasUpdate) {
          console.log('res.hasUpdate====')
          updateManager.onUpdateReady(function () {
            wx.showModal({
              title: '更新提示',
              content: '新版本已经准备好,是否重启应用?',
              success: function (res) {
                console.log('success====', res)
                // res: {errMsg: "showModal: ok", cancel: false, confirm: true}
                if (res.confirm) {
                  // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
                  updateManager.applyUpdate()
                }
              }
            })
          })
          updateManager.onUpdateFailed(function () {
            // 新的版本下载失败
            wx.showModal({
              title: '已经有新版本了哟~',
              content: '新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~'
            })
          })
        }
      })
    }
  }

小程序重新初始化时会触发onLaunch事件

onLaunch事件会触发在页面onShow事件之前.获取小程序更新版本可以写在onLaunch里.

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

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

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

点击确定后:

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

 if (wx.canIUse('getUpdateManager')) {
  ...
} else {
  // can't use getUpdateManager
  wx.showModal({
        title: '提示',
        content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。'
   })

完整版本:

 onLaunch () {
    if (wx.canIUse('getUpdateManager')) {
      const updateManager = wx.getUpdateManager()
      updateManager.onCheckForUpdate(function (res) {
        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: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。'
      })
    }
  }
如果在onLaunch里进行请求, 这是异步请求. 如果对交互顺序有要求, 如: 版本更新--重新获取数据-- 用户展示, 那么需要考虑在callback里进行重获数据.小程序启动时,正常是会热更新,下载新版本的包,下一次启动就会使用新包。但发现有更新不成功的情况发生.

官方回答: 策略生效跟网络环境以及发布时间等若干因素有关,会尽可能让小程序快地更新,但无法保证每次都热更新成功。

小程序的异步更新发生在冷启动过程. 官方不建议热更新. 原因:

参考官网:

https://developers.weixin.qq.com/community/develop/doc/000c2430d30b70251e86f0a0256c09

本文分享自微信公众号 - 国产程序员(Monday_lida),作者:Monday

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • GO(一)简介

    Go 语言的基础组成有以下几个部分:包声明、引入包、函数、变量、语句 & 表达式、注释

    一觉睡到小时候
  • 面向对象的7种设计原则(7)-开闭原则

    开闭原则是面向对象世界里最基础的设计原则,它指导我们如何建立一个稳定,灵活,可扩展的系统。开闭原则定义如下:

    一觉睡到小时候
  • 编码规范 | Java函数优雅之道

    随着软件项目代码的日积月累,系统维护成本变得越来越高,是所有软件团队面临的共同问题。持续地优化代码,提高代码的质量,是提升系统生命力的有效手段之一。软件系统思维...

    一觉睡到小时候
  • 实战:在小程序中获取用户所在城市信息

    最近在做自己的小程序《看啥好呢》,这个小程序是使用云开发的方式开发的,功能特别简单,就是获取豆瓣、大麦网的数据展示,虽然功能简单,但还是记录下开发过程和一些技术...

    Dunizb
  • 微信小程序处理pages的函数比app.js先执行

    我需要先执行app.js里wx.login获取到参数再赋值给页面接口, 问题 页面函数比app.js要先执行 使用promise app.js wxR...

    任我行RQ
  • 微信小程序结合腾讯地图获取用户所在城市信息

    实现小程序进去后会获取用户当前所在城市,然后显示该城市的数据,并且显示在导航栏和 Tab上。

    腾讯位置服务
  • 基于背景预测的提案分割自监督训练

    原文题目:Self-supervised Training of Proposal-based Segmentation via Background Pred...

    Jarvis Cocker
  • 单一职责原则

    尽量让每个类只负责软件中的一个功能, 并将该功能完全封装 (你也可称之为隐藏) 在该类中。

    硬核编程
  • 小程序分类知多少,八大分类你来找

    小程序现在已经成为了互联网圈的热门讨论对象。从 2017 年 1 月登场,到之后被称为鸡肋,再到现在反叛逆袭称为互联网圈的大热点,小程序经历了不小的高低起伏。现...

    微宝阁
  • 【每周一坑】美队盾牌

    大家好,最近更新频率又慢了,【每周一坑】快变成【每两周一坑】了……不过别急,我们正在酝酿一些好玩又实用的内容和活动,很快会陆续奉上。 刚刚加入不久朋友,如果是初...

    Crossin先生

扫码关注云+社区

领取腾讯云代金券