[小程序] 发版更新方案

背景

小程序每次发版更新,都需要反复的删除打开或清除缓存,以获取最新版本。更新的不及时导致不同用户查看的版本不同(有些用户会报Bug、测试也不方便验证新版本)。

方案

手动更新:由用户选择是否更新,如不更新,则不影响用户当前操作,但后台仍会异步更新

  1. 《优先使用本地版本设置》为是
  2. wx.getUpdateManager()

强制更新:保证用户使用最新版本,但强制下载新版,用户必须等待,也许他不关心新版

  1. 《优先使用本地版本设置》为否
  2. 《小程序最低可用版本》选择最新发布的版本

结论:因为小程序的强制更新只需修改后台配置,所以两种方案都要,代码上只用实现手动更新。当此次更新是破坏性的(严重 Bug 修复、模块大改等),就到后台配置强制更新。

实现

在《我的》页面增加「更新提示」(只在需要更新时显示),点击更新版本。

app.js

js 复制代码
App({
  globalData: {
    needUpdate: false,
    uploadDownloadFail: false,
  },

  // 监测是否有版本更新
  watchUpdate() {
    const updateManager = wx.getUpdateManager()
    updateManager.onUpdateReady(() => {
      // 有更新
      this.globalData.needUpdate = true
    })
    updateManager.onUpdateFailed(() => {
      // 有更新,但下载失败
      this.globalData.needUpdate = true
      this.globalData.uploadDownloadFail = true
    })
  },

  onLaunch(options) {
    this.watchUpdate()
  },
})

mine.js

js 复制代码
<view wx:if="{{ needUpdate }}" bind:tap="updateVersion">存在新版本,点击升级</view>
===============================================================
Page({
  /**
   * 页面的初始数据
   */
  data: {
    needUpdate: false,
    uploadDownloadFail: false,
  },

  // 同步 app.js 中的 needUpdate、uploadDownloadFail 变量值
  // 注意:每次都调用 getApp() 以获取最新值
  watchUpdate() {
    this.setData({
      needUpdate: getApp().globalData.needUpdate,
      uploadDownloadFail: getApp().globalData.uploadDownloadFail,
    })
    setInterval(() => {
      this.setData({
        needUpdate: getApp().globalData.needUpdate,
        uploadDownloadFail: getApp().globalData.uploadDownloadFail,
      })
    }, 5000)
  },

  // 更新版本
  updateVersion() {
    const { uploadDownloadFail } = this.data

    if (!uploadDownloadFail) {
      // 新版本下载成功
      wx.showModal({
        title: '更新提示',
        content: '新版本已经准备好,是否重启应用?',
        success: (res) => {
          if (res.confirm) {
            // 应用新版本并重启
            const updateManager = wx.getUpdateManager()
            updateManager.applyUpdate()
          }
        }
      })
    } else {
      // 新版本下载失败
      // wx.showToast({
      //   title: '新版本下载失败,请您尝试删除当前小程序,重新搜索打开!',
      //   icon: 'none',
      //   duration: 8000
      // })
      wx.restartMiniProgram({
        path: '/pages/index/index'
      })
    }
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.watchUpdate()
  },
  
})

可扩展:

  • 显示版本号:wx.getAccountInfoSync().miniProgram.version
  • 增加更新公告,说明更新内容

最后

参考文章:

  1. developers.weixin.qq.com/miniprogram...
  2. mp.weixin.qq.com/s/dTDjRZjqd...

欢迎沟通交流。

相关推荐
Asurplus10 小时前
【微信小程序】3、SpringBoot整合WxJava发送订阅消息
spring boot·微信小程序·消息通知·订阅消息·消息模板
從南走到北16 小时前
物业收费管理小程序ThinkPHP+UniApp
微信小程序·小程序·uni-app·微信公众平台
德莱厄斯17 小时前
简单聊聊小程序、uniapp及其生态圈
前端·微信小程序·uni-app
雨沫相与19 小时前
微信小程序-数据加密
微信小程序·小程序
老李不敲代码20 小时前
榕壹云外卖跑腿系统:基于Spring Boot的开源生活服务平台技术解析
spring boot·微信小程序·uni-app·开源·生活·软件需求
换日线°1 天前
微信小程序一款不错的文字动画
微信小程序
忙碌的菠萝1 天前
微信小程序页面分享
微信小程序·小程序
甜甜的资料库2 天前
基于ssm智慧乡村旅游服务平台微信小程序源码数据库文档
数据库·微信小程序·旅游
小新1102 天前
微信小程序之弹窗布局
微信小程序·小程序
三脚猫的喵2 天前
微信小程序使用画布实现飘落泡泡功能
前端·javascript·微信小程序·小程序