1
fei.wang
2025-03-07 1b6a3e58e8d3f9a4a56810b5433e28230fe8f3bb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
export type StoreListItem = {
    enable : boolean
    id : string
    name : string
    scheme : string
    priority : number // 优先级
}
 
export type UniUpgradeCenterResult = {
    _id : string
    appid : string
    name : string
    title : string
    contents : string
    url : string // 安装包下载地址
    platform : Array<string> // Array<'Android' | 'iOS'>
    version : string // 版本号 1.0.0
    uni_platform : string // "android" | "ios" // 版本号 1.0.0
    stable_publish : boolean // 是否是稳定版
    is_mandatory : boolean // 是否强制更新
    is_silently : boolean | null    // 是否静默更新
    create_env : string // "upgrade-center"
    create_date : number
    message : string
    code : number
 
    type : string // "native_app" | "wgt"
    store_list : StoreListItem[] | null
    min_uni_version : string | null  // 升级 wgt 的最低 uni-app 版本
}
 
export default function () : Promise<UniUpgradeCenterResult> {
    // #ifdef APP
    return new Promise<UniUpgradeCenterResult>((resolve, reject) => {
        const systemInfo = uni.getSystemInfoSync()
        const appId = systemInfo.appId
        const appVersion = systemInfo.appVersion //systemInfo.appVersion
        // #ifndef UNI-APP-X
        console.log(appId);
        console.log(appVersion);
        if (typeof appId === 'string' && typeof appVersion === 'string' && appId.length > 0 && appVersion.length > 0) {
            plus.runtime.getProperty(appId, function (widgetInfo) {
                if (widgetInfo.version) {
                    let data = {
                        action: 'checkVersion',
                        appid: appId,
                        appVersion: appVersion,
                        wgtVersion: widgetInfo.version
                    }
                    uniCloud.callFunction({
                        name: 'uni-upgrade-center',
                        data,
                        success: (e) => {
                            resolve(e.result as UniUpgradeCenterResult)
                        },
                        fail: (error) => {
                            reject(error)
                        }
                    })
                } else {
                    reject('widgetInfo.version is EMPTY')
                }
            })
        } else {
            reject('plus.runtime.appid is EMPTY')
        }
        // #endif
        // #ifdef UNI-APP-X
        if (typeof appId === 'string' && typeof appVersion === 'string' && appId.length > 0 && appVersion.length > 0) {
            let data = {
                action: 'checkVersion',
            appid: appId,
            appVersion: appVersion,
                is_uniapp_x: true,
                wgtVersion: '0.0.0.0.0.1'
            }
            try {
                uniCloud.callFunction({
                    name: 'uni-upgrade-center',
                    data: data
                }).then(res => {
                    const code = res.result['code']
                    const codeIsNumber = ['Int', 'Long', 'number'].includes(typeof code)
                    if (codeIsNumber) {
                      if ((code as number) == 0) {
                        reject({
                          code: res.result['code'],
                          message: res.result['message']
                        })
                      } else if ((code as number) < 0) {
                        reject({
                          code: res.result['code'],
                          message: res.result['message']
                        })
                      } else {
              const result = JSON.parse<UniUpgradeCenterResult>(JSON.stringify(res.result)) as UniUpgradeCenterResult
              resolve(result)
            }
                    }
                }).catch<void>((err : any | null) => {
                    const error = err as UniCloudError
                    if (error.errMsg == '未匹配到云函数[uni-upgrade-center]')
                        error.errMsg = '【uni-upgrade-center-app】未配置uni-upgrade-center,无法升级。参考: https://uniapp.dcloud.net.cn/uniCloud/upgrade-center.html'
                    reject(error.errMsg)
                })
            } catch (e) {
                reject(e.message)
            }
        } else {
            reject('invalid appid or appVersion')
        }
        // #endif
    })
    // #endif
    // #ifndef APP
    return new Promise((resolve, reject) => {
        reject({
            message: '请在App中使用'
        })
    })
    // #endif
}