[小程序] 发版更新方案

背景

小程序每次发版更新,都需要反复的删除打开或清除缓存,以获取最新版本。更新的不及时导致不同用户查看的版本不同(有些用户会报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...

欢迎沟通交流。

相关推荐
Emma歌小白9 小时前
如何首次运行小程序后端
微信小程序
赣州云智科技的技术铺子10 小时前
【一步步开发AI运动APP】十二、自定义扩展新运动项目1
微信小程序·小程序·云开发·智能小程序
海绵宝宝不喜欢侬1 天前
uniapp-微信小程序分享功能-onShareAppMessage
微信小程序·小程序·uni-app
亮子AI1 天前
【小程序】微信小程序隐私协议
微信小程序·小程序
毕设源码-钟学长1 天前
【开题答辩全过程】以 “旧书驿站”微信小程序的设计与开发为例,包含答辩的问题和答案
微信小程序·小程序
nodcloud2 天前
点可云进销存商城如何部署在微信小程序
微信小程序·小程序
项目題供诗3 天前
微信小程序开发教程(八)
微信小程序·小程序
拼图2093 天前
微信小程序——云函数【使用使用注意事项】
微信小程序·小程序
Q_Q5110082853 天前
springboot+python+uniapp基于微信小程序的旅游服务系统景点信息展示 路线推荐 在线预约 评论互动系统
spring boot·python·微信小程序·django·flask·uni-app
海绵宝宝不喜欢侬3 天前
uniapp微信小程序保存海报到手机相册canvas
智能手机·微信小程序·uni-app·canva可画