uni-app 微信小程序基础库低于2.20.3时会出现wx.getAppBaseInfo is not a function错误,导致无法进入小程序
uni-app 微信小程序基础库低于2.20.3时会出现wx.getAppBaseInfo is not a function错误,导致无法进入小程序
操作步骤:
1、新建项目
2、选择vue2版本,默认模板
3、编译到微信小程序,微信开发者工具基础库改为2.19.6
预期结果:
可以正常进入小程序
实际结果:
无法进入小程序,影响线上用户的使用
bug描述:
微信小程序基础库低于2.20.3,会出现wx.getAppBaseInfo is not a function错误,无法进入小程序
开发环境 | 信息 |
---|---|
PC开发环境操作系统 | Mac |
PC开发环境操作系统版本号 | macOS 12.6 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 4.44 |
第三方开发者工具版本号 | 1.06.2409140 |
基础库版本号 | 2.19.6 |
项目创建方式 | HBuilderX |
微信文档中有对这个支持版本的描述
你好,我也看到这个,但我并没有使用这个哦,新建的uniapp项目就会出现这个报错,我怀疑是uniapp框架使用了这个方法
回复 努力生活: 这个方法打包到微信小程序中,就会使用 wx.getAppBaseInfo
回复 DCloud_UNI_yuhe: 好的,那你们考虑修复这个bug吗
回复 DCloud_UNI_yuhe: 回复 DCloud_UNI_yuhe: 因为是客户那边投诉过来的,我要给出解释
回复 努力生活: 不明白你的意思,你是说你没有用到 uni.getAppBaseInfo 但是出现了这个报错?
回复 DCloud_UNI_yuhe: 嗯,看我的复现步骤,1、新建项目 2、选择vue2版本,默认模板 3、编译到微信小程序,微信开发者工具基础库改为2.19.6
回复 DCloud_UNI_yuhe: 哈哈,可能我描述的有问题,我没有用到 uni.getAppBaseInfo,新建的空白项目就会出现
我明白了,跟你说一下原因:在上个月的更新中,对 uniapp 的框架进行了一次更新,把框架中 getSystemInfo 的警告消除了,因为微信官网中对于 getSystemInfo 的描述中,需要使用具体的 API 进行替换,因此在图 2 部分,原本是 getSystemInfo ,替换成了 getAppBaseInfo。导致了这个问题,建议您升级基础库版本来解决。
这样啊,那框架可以考虑使用canIUse兼容一下低版本的用户呢,因为我们平台的用户老版本的微信还是挺多的,他们不升级微信的话小程序都进不去了,有的还不会升级微信版本
回复 努力生活: 我们会考虑,请关注升级
这个是兼容旧版本的方案,供临时使用,之后会更新。此方案会在框架层兼容,同时也会兼容方法,也就是可以在 2.20 以下版本使用getAppBaseInfo ,getWindowInfo , getDeviceInfo
vue3
方式:将帖子中的 dist-vue3 改为 dist 并替换到:/Applications/HBuilderX-Alpha.app/Contents/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-mp-weixin
vue2
方式:将帖子中的 dist-vue2 改为 dist 并替换到:/Applications/HBuilderX-Alpha.app/Contents/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/uni-mp-weixin
这个位置中,Windows 目录类似
在处理uni-app开发微信小程序时,遇到因基础库版本低于2.20.3而导致的wx.getAppBaseInfo is not a function
错误,确实会影响小程序的正常运行。为了解决这个问题,我们可以采取以下几种策略,主要是进行版本判断和条件编译来确保代码的兼容性。
1. 版本判断与条件编译
首先,我们可以在小程序的入口文件(如main.js
或App.vue
的onLaunch
方法中)添加代码来检查当前基础库的版本,并据此决定是否调用wx.getAppBaseInfo
。这里我们利用uni-app的条件编译特性来处理不同版本的逻辑。
// App.vue 或 main.js 中的 onLaunch 方法
export default {
onLaunch: function() {
const systemInfo = wx.getSystemInfoSync();
const baseLibVersion = systemInfo.SDKVersion;
// 检查基础库版本是否低于2.20.3
if (parseFloat(baseLibVersion) < 2.203) {
// 基础库版本低于要求,执行兼容逻辑
console.warn('当前微信基础库版本低于2.20.3,可能无法完全兼容');
// 这里可以执行一些降级处理,比如不显示依赖该API的功能
} else {
// 基础库版本符合要求,尝试调用wx.getAppBaseInfo
wx.getAppBaseInfo({
success: (res) => {
console.log('获取应用基础信息成功:', res);
// 处理获取到的信息
},
fail: (err) => {
console.error('获取应用基础信息失败:', err);
// 处理失败情况
}
});
}
}
}
2. 使用uni-app提供的兼容方案
uni-app框架本身也提供了一些兼容方案,比如使用uni.getSystemInfo
替代部分微信小程序的API。虽然uni.getSystemInfo
不能直接替代wx.getAppBaseInfo
,但你可以考虑调整功能需求,避免直接依赖该API,或者寻找其他方式获取所需信息。
3. 引导用户升级微信
如果小程序功能严重依赖wx.getAppBaseInfo
,且无法通过其他方式替代,可以考虑在页面上显示提示信息,引导用户升级微信至支持该API的版本。
结论
通过上述方法,我们可以在不直接建议用户升级微信基础库(因为这是用户控制的,开发者无法强制)的情况下,尽可能地提高小程序的兼容性和用户体验。重要的是,在开发过程中时刻注意API的兼容性,利用条件编译和版本检测来确保代码的健壮性。