前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >uni-app app热更新+整包更新

uni-app app热更新+整包更新

作者头像
风花一世月
发布2024-03-19 13:03:52
1020
发布2024-03-19 13:03:52
举报
文章被收录于专栏:前端前端

引入云函数模板插件

https://ext.dcloud.net.cn/plugin?id=2226

 index.js

代码语言:javascript
复制
'use strict';
exports.main = async (event, context) => {
  //event为客户端上传的参数
  console.log('event : ' + event)

  let result = {
    isUpdate: false
  }

  let appid = event.appid
  let clientVersion = event.version

  //这是通过HTTP接口访问的
  if (event.headers) {
    appid = event.queryStringParameters.appid
    clientVersion = event.queryStringParameters.version
  }

  //根据UA判断系统平台
  const os = /iPhone|iPad/.test(context.CLIENTUA) ? 'ios' : 'android'

  if (appid && clientVersion) {
    const db = uniCloud.database();

    const collection = db.collection('uni-app-version')
    const record = await collection.where({
      appid: appid
    }).limit(1).get()

    if (record && record.data && record.data.length > 0) {
      let versionInDb = record.data[0][os]
      if (compare(versionInDb.version, clientVersion) == 1) {
          result.isUpdate = true
        result.update_title = versionInDb.update_title
        result.update_des = versionInDb.update_des
        result.update_type = versionInDb.update_type;
        if(versionInDb.update_type=="0"){
            result.update_url = versionInDb.update_wgturl
        }else(
            result.update_url = versionInDb.update_url
        )
        result.is_update_app = true
        
      } else {
        result.msg = '当前版本已经是最新的,不需要更新!'
      }
    } else {
      result.msg = 'AppId不匹配'
    }
  }

  console.log('检查结果:', result);

  //返回数据给客户端
  return result
};

/**
 * 对比版本号
 * @param {Object} v1
 * @param {Object} v2
 */
function compare(v1, v2) {
  let arr_1 = v1.split('.')
  let arr_2 = v2.split('.')
  for (var i = 0; i < arr_1.length; i++) {
    if (parseInt(arr_1[i]) > parseInt(arr_2[i])) {
      return 1
    } else if (parseInt(arr_1[i]) < parseInt(arr_2[i])) {
      return -1
    }
  }
  return 0
}

db_init.json

代码语言:javascript
复制
{
    "uni-app-version": {
        "data": [{
          "appid": "__UNI__2991979",
          "name": "智慧GD综合管理平台助手",
          "android": {
            "update_des": "接入uni统计\n解决微信自定义组件运行失败的Bug",
            "update_title": "Hello uni-app更新",
            "update_type":"0",
            "update_url": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-de008e92-ac42-4aea-819d-7512deeb436b/847431fd-f8f3-4ac8-a1e4-56584f73c304.apk",
            "update_wgturl":"https://vkceyugu.cdn.bspapp.com/VKCEYUGU-de008e92-ac42-4aea-819d-7512deeb436b/847431fd-f8f3-4ac8-a1e4-56584f73c304.apk",
            "is_update_app":true,
            "version": "1.1.2"
          }
          // ,
          // "ios": {
          //   "note": "增加权限判断\n实例首页重构为 nvue,提升渲染速度",
          //   "title": "Hello uni-app更新",
          //   "url": "https://itunes.apple.com/cn/app/hello-uni-app/id1417078253?mt=8",
          //   "version": "1.3.4"
          // }
        }]
    }
}

App.vue

代码语言:javascript
复制
onLaunch: function() {
            // #ifdef APP-PLUS  
            plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) {
                uniCloud.callFunction({
                  name: 'chb-check-update',
                  data: {
                    version: widgetInfo.version,  
                    appid: widgetInfo.appid
                  },
                  success:(e)=>{
                    if (e.result.isUpdate) {//需要更新
                        if(e.result.update_type=="0"){
                            uni.showModal({
                                title: '发现新版本,请点击升级',
                                content: e.result.update_des,
                                cancelText: '稍后更新',
                                confirmText: '立即更新',
                                success: (r) => {
                                    if (r.confirm) {
                                        uni.downloadFile({ //下载更新文件
                                            url: e.result.update_url,
                                            success: (down) => {
                                                    plus.runtime.install(down.tempFilePath, { //安装更新文件
                                                        force: true //是否强制安装
                                                    }, function() { //安装成功
                                                        uni.showToast({
                                                            title: '更新成功',
                                                            icon: 'success',
                                                        })
                                                        plus.runtime.restart() //重启
                                                    }, function() { //更新失败的操作
                                                        uni.showToast({
                                                            title: '更新失败',
                                                        })
                                                    })
                                                
                                            }
                                        })
                                    }
                                }
                            })
                            
                        }else{
                            // 提醒用户更新
                            uni.showModal({
                              title: "发现新版本,请点击升级",
                              content: e.result.update_des ? e.result.update_des : '是否选择更新',
                              success: (ee) => {
                                if (ee.confirm) {
                                  plus.runtime.openURL(e.result.update_url);
                                }
                              }
                            })
                        }
                      
                    }
                  }
                })
                
                });
                
                    
            
            // #endif
            console.log('App Launch')
            
        },
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-03-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云函数
云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。云函数是实时文件处理和数据处理等场景下理想的计算平台。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档