uni-app 微信小程序基础库低于2.20.3时会出现wx.getAppBaseInfo is not a function错误,导致无法进入小程序

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

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错误,无法进入小程序

Image

开发环境 信息
PC开发环境操作系统 Mac
PC开发环境操作系统版本号 macOS 12.6
HBuilderX类型 正式
HBuilderX版本号 4.44
第三方开发者工具版本号 1.06.2409140
基础库版本号 2.19.6
项目创建方式 HBuilderX

13 回复

微信文档中有对这个支持版本的描述


你好,我也看到这个,但我并没有使用这个哦,新建的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.jsApp.vueonLaunch方法中)添加代码来检查当前基础库的版本,并据此决定是否调用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的兼容性,利用条件编译和版本检测来确保代码的健壮性。

回到顶部