更新记录

1.0.0(2020-10-27)

v1.0.0

  1. 添加热更新及整包更新后台管理功能

平台兼容性

阿里云 腾讯云 支付宝云
×

云函数类插件通用教程

使用云函数类插件的前提是:使用HBuilderX 2.9+


  1. 使用elementui框架做的后台更新管理页面

使用方式

导入后需要使用npm install来安装element-ui插件

需要配合前端的更新使用

在app的项目中

1) 添加云函数

其内容如下:

'use strict';
exports.main = async (event, context) => {
    //event为客户端上传的参数
    console.log('event : ' + JSON.stringify(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
        }).orderBy('createTime','desc').limit(1).get()

        if (record && record.data && record.data.length > 0) {
            let versionInDb = record.data[0]
            if (compare(versionInDb.version, clientVersion) == 1) {
                result.isUpdate = true
                result.note = versionInDb.note
                // result.apkUrl = versionInDb.apkUrl
                result.wgtUrl = versionInDb.wgtUrl
                // result.ipaUrl = versionInDb.ipaUrl
                result.pkgUrl = os === 'ios' ? versionInDb.ipaUrl : versionInDb.apkUrl
            } 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
}

2) 在App.vue中调用云函数

<script>
    export default {
        onLaunch: function() {
            console.log('App Launch')
            // #ifdef APP-PLUS
            plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) {
                uniCloud.callFunction({
                    name: 'dh-check-update',
                    data: {
                        appid: plus.runtime.appid,
                        name: widgetInfo.name,
                        version: widgetInfo.version
                    },
                    success(e) {
                        if (e.result.isUpdate) { //需要更新
                            // 提醒用户更新
                            uni.showModal({
                                title: '更新提示',
                                content: e.result.note ? e.result.note : '是否选择更新',
                                success: (ee) => {
                                    if (ee.confirm) {
                                        // 整包更新
                                        if (e.result.pkgUrl) {
                                            plus.runtime.openURL(e.result.pkgUrl);
                                            // 资源热更新
                                        } else if (e.result.wgtUrl) {
                                            uni.downloadFile({
                                                url: e.result.wgtUrl,
                                                success: (downloadResult) => {
                                                    if (downloadResult.statusCode === 200) {
                                                        plus.runtime.install(downloadResult.tempFilePath, {
                                                            force: true
                                                        }, function() {
                                                            plus.runtime.restart();
                                                        }, function(e) {
                                                        });
                                                    }
                                                }
                                            });
                                        }
                                    }
                                }
                            })
                        }
                    }
                })
            });
            // #endif
        }
    }
</script>

3) 使用后台项目可以选择文件上传,存储在后台的云存储中
4)亲测可用,不理解的可以联系作者

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问