一. 机型
- 手机型号: HUAWEI nova 11 Pro
- 手机系统: HarmonyOS 4.2.0
二. 复现方式
(1)开启以下4个权限
- 手机系统对应用的设置 允许微信使用蓝牙(有的手机此项叫附近设备)
- 手机系统对应用的设置 允许微信使用定位开关
- 微信对小程序的设置 授权蓝牙
- 微信对小程序的设置 授权精确地理位置
(2)调用 wx.getAppAuthorizeSetting 和 wx.getSettingminiprogramAuthSetting API 并打印返回值
在返回值中可以看到4个权限对应返回值:
- wx.getAppAuthorizeSetting bluetoothAuthorized (允许微信使用蓝牙的开关 未开启)
- wx.getAppAuthorizeSetting locationAuthorized (允许微信使用定位的开关 已开启)
- wx.getSettingminiprogramAuthSetting.scope.bluetooth (当前宿主小程序的用户授权结果,是否授权蓝牙 已授权)
- wx.getSettingminiprogramAuthSetting.scope.userLocation (当前宿主小程序的用户授权结果,是否授权精确地理位置 已授权)
可以看出,手机操作系统已给微信开启蓝牙权限,但小程序 wx.getAppAuthorizeSetting 返回的 bluetoothAuthorized 是 denied, 是不对的。
(3)在当前状态执行业务逻辑
系统设置页的状态和微信小程序API调用出现了矛盾,依旧存在一种可能性:wx.getAppAuthorizeSetting 对的,系统设置页展示错误,那么继续进行蓝牙逻辑,即可知道微信使用蓝牙的权限是否真正开启了。
在当前状态下,执行了公司的蓝牙相关业务逻辑,结果是正常运行(此处不放代码和截图了,可以自行验证)。所以确定是 wx.getAppAuthorizeSetting 返回的值异常。
考虑到该错误只在特定机型下出现,猜测可能是微信小程序API对安卓底层的兼容方向出的问题。后续就无法继续排查了,要交给小程序官方了。
(4)退出小程序;关闭手机系统对微信蓝牙权限的授权开关,再重新打开;
执行这一步操作后,wx.getAppAuthorizeSetting 返回值又正常了。
此步骤4可以给广大微信小程序开发者,作为一种临时的解决手段。但用户体验较差。即便我们给了引导提示,我们的客户也没有意愿去重启手机权限,而是跟倾向于向公司投诉我们研发团队……
三. 文档问题
wx.getAppAuthorizeSetting 其实是有两份文档的,官方回复开发者的留言里经常把文档搞混,其实正确的只有一个。
(1) 文档A
- 该文档属于多端能力目录下,未特指小程序,但官方引用了这部分
- 使用范围:【仅 iOS 有效,所以返回 'undefined', Android 端可忽略】
- 原始链接:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/miniapp/api/diffapi/getAppAuthorizeSetting.html
(2)文档B
- 小程序文档目录下
- 使用范围:iOS和安卓均有效,对安卓基础库版本有限制
- 原始链接:https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getAppAuthorizeSetting.html
(3)结论
结合我司测试团队对多种机型多次的测试,可以确定:该API在安卓和iOS下均有效,且所有的BUG都出现在安卓机型。所以文档B是对的。
四. BUG 修复进度问题
微信官方也承认了该问题,并于2024年8月9日发布公告,称该问题在修复中。
但截止今天(2024-12-18)微信小程序官方还没有发布修复完毕的版本公告。
五. 可复现机型
我司测试团队使用了几十种机型进行测试,在以下机型也复现了问题,此处提供给微信小程序团队,希望能帮助到官方团队更高效定位问题
- 华为 nova 12 Ultra (HarmonyOS版本 4.2.0.156)
- 华为 nova 9/nova 7/nova11 se
- oppo reno8,reno 9
- oppo A2
- 荣耀100
- 华为 mate 60 pro
- 一加 Ace Pro
全部问题出现在安卓,并且可以锁定华为(包括荣耀)和OPPO(包括一加)两大品牌。
六. 附录
(1)附社区反馈地址,供测试复现问题和查找机型的参考:
(2)附官方文档接口API地址:
https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getAppAuthorizeSetting.html
2025年2月22日,该问题还没有修复,严重影响用户体验,运营效果
截止到2025.1.22号 该BUG依然没有得到解决修复,非常影响用户体验,甚至一度怀疑自己的代码出了什么问题
2025.03.21日,该问题依然没有得到解决
iQOO11返回蓝牙状态异常
非常影响我们现在小程序的用户体验,希望可以早日修复。