uni-app IOS16.5以上蓝牙连接无法返回advertisData信息
uni-app IOS16.5以上蓝牙连接无法返回advertisData信息
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | win10 | HBuilderX |
操作步骤:
ios更新到16.3以上版本,连接蓝牙,无法返回advertisData信息
预期结果:
返回advertisData信息,解密出mac地址后进行蓝牙匹配连接
实际结果:
无法返回advertisData信息,无法连接蓝牙设备
bug描述:
苹果手机升级ios16.5后,蓝牙连接设备后无法返回advertisData信息,mac地址存在advertisData中,导致苹果手机无法连接设备,安卓手机可以正常连接
https://developers.weixin.qq.com/community/develop/doc/0000a6fa460e982fdca059a5561400?highLine=iOS16.3%20%E8%93%9D%E7%89%99
这个应该是微信小程序的Bug 可以去他们社区跟踪一下问题
大佬,想问下,我现在是ios 17的版本,app端,uni.writeBLECharacteristicValue()写入特征值是没有任何回调,每次调用都是没有回调触发的,这个该怎么解决啊
图1是ios16.3以下版本的返回,图2是ios16.3以上版本的返回,直接缺少了advertisData字段
有没有大佬解答以下呀,急急急
已解决,调用uni.onBluetoothDeviceFound时,返回的结果值中,在IOS16.3以下版本,第一个devices中包含advertisData字段,但是在IOS16.3以上的版本,api返回蓝牙设备信息时会重复返回,在第一个devices中没有advertisData字段,在第二个重复返回的devices中包含advertisData字段。
在 UniApp 中,iOS 16.5 及以上版本可能会出现蓝牙连接时无法返回 advertisData
信息的问题。这可能是由于 iOS 系统更新后对蓝牙权限或数据处理方式的调整导致的。以下是一些可能的解决方案和排查步骤:
1. 检查 iOS 系统权限
- 确保应用已经获取了蓝牙权限。在 iOS 中,使用蓝牙需要在
Info.plist
文件中添加NSBluetoothAlwaysUsageDescription
和NSBluetoothPeripheralUsageDescription
权限描述。 - 在 UniApp 项目中,可以在
manifest.json
的ios
配置中添加以下内容:"permissions": { "ios": { "NSBluetoothAlwaysUsageDescription": "请允许使用蓝牙以连接设备", "NSBluetoothPeripheralUsageDescription": "请允许使用蓝牙以连接设备" } }
2. 更新 UniApp 和 HBuilderX
- 确保你的 UniApp 和 HBuilderX 是最新版本。开发者可能已经修复了与 iOS 16.5 及以上版本的兼容性问题。
- 更新方法:
- 打开 HBuilderX,点击菜单栏的
帮助
->检查更新
。 - 更新 UniApp 项目依赖(如果有)。
- 打开 HBuilderX,点击菜单栏的
3. 检查蓝牙设备广播数据
- 某些蓝牙设备在 iOS 16.5 及以上版本中可能会限制广播数据的返回。可以尝试使用其他蓝牙设备或工具(如 LightBlue)测试设备是否正常广播数据。
- 如果设备本身没有广播
advertisData
,则无法获取该数据。
4. 使用 UniApp 的 onBluetoothDeviceFound
事件
- 在 UniApp 中,
onBluetoothDeviceFound
事件可以监听发现的蓝牙设备。确保你正确实现了该事件,并检查返回的设备信息中是否包含advertisData
。 - 示例代码:
uni.onBluetoothDeviceFound((res) => { console.log('发现设备:', res.devices); if (res.devices[0].advertisData) { console.log('广播数据:', res.devices[0].advertisData); } else { console.log('未获取到广播数据'); } });