uni-app的uni-upgrade-center无法升级版本
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]
不知道哪里出了问题?
开发环境与版本信息
项目创建方式 | 开发环境 | 版本号 |
---|---|---|
- | uni-upgrade-center - Admin | 0.6.2 |
- | uni-upgrade-center - App | 0.9.4 |
- | HbuilderX | 4.36 |
- | uniCloud | 支付宝云 |
- | vue | 3.0 |
同问, 整得一头雾水,建议文档使用,冰箱怎么装进大象的思维,来完善
你好你解决了吗
你好你解决了吗
没呢,我都自己实现了,自己的话实现也很快,主要拿线上自定义的版本号对比,然后下载, 安装. 实现过程官方那个插件里面的代码可以抄
回复 Johnny_new: 用自定基座运行,不要用标准基座
回复 3***@qq.com: 谢谢了 我解决了
各位,我还没解决,看来遇到相同问题的人不少,有解决方案,我会通知大家的。
我解决了
回复 Johnny_new: 确实要用自定义基座打包
问题解决了。
具体方法:
- 制作自定义调试基座,不要用“标准基座运行”,不然 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无法升级版本的问题。如果问题依旧存在,请检查网络请求、服务器响应以及客户端日志,以便进一步定位问题。