uni-app的uni-upgrade-center无法升级版本

发布于 1周前 作者 gougou168 来自 Uni-App

uni-app的uni-upgrade-center无法升级版本

问题描述

根据官方指引,在管理后台上传App安装包和wgt资源包,云数据库已经有了 opendb-app-versions,且有数据了。但是我在本地调用 checkUpdate() 方法时,提示 widgetInfo.version is EMPTY。

查看源码,发现call-check-version.ts 文件plus.runtime.getProperty() 拿到的结果是:

{
"appid": "UNIEA53806",
"version": "",
"versionCode": "",
"features": []
}

systemInfo结果:

{
"SDKVersion": "",
"appId": "UNIEA53806",
"appLanguage": "en",
"appName": "PCIM",
"appVersion": "14.36",
"appVersionCode": 1436,
"appWgtVersion": "1.2.2",
"brand": "google",
"browserName": "chrome",
....
}

我在本地测试:

uniCloud.callFunction({
name: 'uni-upgrade-center',
data: {
action: 'checkVersion',
appid: appId,
appVersion: appVersion,
wgtVersion: "1.2.2"
},
success: (e) => {
resolve(e.result as UniUpgradeCenterResult)
},
fail: (error) => {
reject(error)
}
})

提示:Error: 未匹配到云函数[uni-upgrade-center]

不知道哪里出了问题?

Image Image Image

开发环境与版本信息

项目创建方式 开发环境 版本号
- uni-upgrade-center - Admin 0.6.2
- uni-upgrade-center - App 0.9.4
- HbuilderX 4.36
- uniCloud 支付宝云
- vue 3.0

13 回复

同问, 整得一头雾水,建议文档使用,冰箱怎么装进大象的思维,来完善


你好你解决了吗

同问,我找不到一个检查更新的demo

你好你解决了吗

没呢,我都自己实现了,自己的话实现也很快,主要拿线上自定义的版本号对比,然后下载, 安装. 实现过程官方那个插件里面的代码可以抄

回复 Johnny_new: 用自定基座运行,不要用标准基座

回复 3***@qq.com: 谢谢了 我解决了

各位,我还没解决,看来遇到相同问题的人不少,有解决方案,我会通知大家的。

回复 Johnny_new: 确实要用自定义基座打包

问题解决了。
具体方法:

  1. 制作自定义调试基座,不要用“标准基座运行”,不然 uni.getSystemInfoSync()获取的appVersion是标准基座的版本号,不是mainfest.json中配置的应用版本号。切记!
    2.选择运行到手机或模拟器时,选择自定义基座运行即可。
    3.官方文档没说清楚,他们的维护人员可能也是个菜鸡,答非所问,大家继续踩坑吧!




在处理uni-app中的uni-upgrade-center无法升级版本的问题时,首先需要确保你的应用配置、代码实现以及服务器端设置都是正确的。以下是一个基本的示例代码和配置流程,帮助你排查和解决问题。

1. 确保App配置正确

首先,在manifest.json文件中,确保你已经正确配置了app-plus下的upgrade信息,包括upgrade-type(是否强制升级)、check-upgrade(是否自动检测升级)等。

"app-plus": {
    "upgrade": {
        "upgrade-type": "0", // 0表示不强制升级,1表示强制升级
        "check-upgrade": true, // 是否自动检测升级
        "auto-installapk": true, // 是否自动下载安装包(仅Android)
        "auto-installipa": false // 是否自动安装ipa(仅iOS,通常设置为false)
    }
}

2. 服务器端配置

确保你的服务器端返回了正确的升级信息。服务器响应的JSON格式应如下所示:

{
    "wgtUrl": "https://your-server.com/path/to/your/upgrade/package.wgt", // 下载wgt包的地址
    "version": {
        "name": "1.0.1", // 新版本名称
        "code": "101" // 新版本代码,通常用于版本比较
    },
    "description": "修复了一些已知问题并优化了性能。", // 版本描述
    "force": false // 是否强制升级
}

3. 客户端代码实现

在客户端,使用uni.getSystemInfoSync()获取当前版本信息,并与服务器返回的版本信息进行对比。如果检测到新版本,则提示用户升级。

uni.request({
    url: 'https://your-server.com/api/check-upgrade', // 检查升级的接口
    success: (res) => {
        const serverVersion = res.data.version;
        const currentVersion = uni.getSystemInfoSync().versionName; // 获取当前版本名称

        if (compareVersion(serverVersion.code, getVersionCodeFromName(currentVersion))) {
            uni.showModal({
                title: '版本更新',
                content: `检测到新版本${serverVersion.name},请更新!`,
                success: (result) => {
                    if (result.confirm) {
                        // 跳转到下载或更新页面
                        uni.navigateTo({
                            url: `/pages/upgrade/upgrade?url=${encodeURIComponent(res.data.wgtUrl)}`
                        });
                    }
                }
            });
        }
    }
});

// 版本比较函数(根据实际需要实现)
function compareVersion(v1, v2) {
    return v1 > v2;
}

// 从版本名称中提取版本代码(根据实际需要实现)
function getVersionCodeFromName(versionName) {
    // 示例:假设版本名称为"1.0.1",返回101
    return parseInt(versionName.replace(/\./g, ''));
}

确保上述步骤和代码实现无误后,通常可以解决uni-upgrade-center无法升级版本的问题。如果问题依旧存在,请检查网络请求、服务器响应以及客户端日志,以便进一步定位问题。

回到顶部