微信小程序编写过程中常见错误(2)wx.getSystemInfo(Object object)与Object wx.getDeviceInfo()踩坑qunawnag
开发者在升级微信小程序接口时遇到报错"backgroundfetchprivacyfail",花费一周时间排查后发现是wx.getSystemInfo与wx.getDeviceInfo接口使用方式差异导致。关键区别在于:wx.getSystemInfo是异步接口需要回调函数,而wx.getDeviceInfo是同步接口直接返回数据。错误原因是将同步接口当作异步接口使用,正确做法是直接获取wx.ge
由于这年头AI太好用了,所以没有写代码前先翻官方文档的习惯,结果一个bug折腾了快一周都没查出来是什么错误,一直疯狂报WAServiceMainContext.js:1 [wxapplib]] backgroundfetch privacy fail {"errno":101,"errMsg":"private_getBackgroundFetchData:fail private_getBackgroundFetchData:fail:jsapi invalid request data"},我去翻遍了全网都找不到合适的解决方法,疯狂问ai然后改代码也不行,结果最后发现,蠢到家了。
进入正题:![]()
WAServiceMainContext.js:1 [wxapplib]] backgroundfetch privacy fail {"errno":101,"errMsg":"private_getBackgroundFetchData:fail private_getBackgroundFetchData:fail:jsapi invalid request data"
当出现上述错误的时候怎么办?有时候并不是你的权限获取、隐私声明的问题,也有可能你的代码压根没写对,当我们从旧的wx.getSystemInfo(Object object)接口升级到新的wx.getDeviceInfo()接口时,要注意一个踩坑点:
wx.getSystemInfo(Object object):
从基础库 2.20.1 开始,本接口停止维护,请使用 wx.getSystemSetting、wx.getAppAuthorizeSetting、wx.getDeviceInfo、wx.getWindowInfo、wx.getAppBaseInfo 代替
这是 wx.getSystemInfo 的返回值,有三个回调函数(异步回调):
| 属性 | 类型 | 默认值 | 必填 | 说明 |
|---|---|---|---|---|
| success | function | 否 | 接口调用成功的回调函数 | |
| fail | function | 否 | 接口调用失败的回调函数 | |
| complete | function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
这是 wx.getDeviceInfo() 的返回值(同步调用):
Object
| 属性 | 类型 | 说明 |
|---|---|---|
| abi | string | 应用(微信APP)二进制接口类型(仅 Android 支持) |
| deviceAbi | string | 设备二进制接口类型(仅 Android 支持) |
| benchmarkLevel | number | 设备性能等级(仅 Android 支持)。取值为:-2 或 0(该设备无法运行小游戏),-1(性能未知),>=1(设备性能值,该值越高,设备性能越好,目前最高不到50) 注意:从基础库3.4.5开始,本返回值停止维护,请使用wx.getDeviceBenchmarkInfo获取设备性能等级 |
| brand | string | 设备品牌 |
| model | string | 设备型号。新机型刚推出一段时间会显示unknown,微信会尽快进行适配。 |
| system | string | 操作系统及版本 |
| platform | string | 客户端平台 |
| cpuType | string | 设备 CPU 型号(仅 Android 支持)(Tips: GPU 型号可通过 WebGLRenderingContext.getExtension('WEBGL_debug_renderer_info') 来获取) |
| memorySize | string | 设备内存大小,单位为 MB |
注意了!!! wx.getDeviceInfo() 并没有回调函数,所以你直接把 getSystemInfo 改为 getDeviceInfo 不改代码逻辑的话就会一直报错,然后也无法正确执行代码,简直怀疑人生,getDeviceInfo是同步函数,所以直接获取返回值然后加判断语句去修改代码就行了,不需要放在回调函数里!
示例代码
const deviceInfo = wx.getDeviceInfo() console.log(deviceInfo.abi) console.log(deviceInfo.benchmarkLevel) console.log(deviceInfo.brand) console.log(deviceInfo.model) console.log(deviceInfo.platform) console.log(deviceInfo.system)
更多推荐

所有评论(0)