uni-app IOS16.5以上蓝牙连接无法返回advertisData信息

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

uni-app IOS16.5以上蓝牙连接无法返回advertisData信息

开发环境 版本号 项目创建方式
Windows win10 HBuilderX

操作步骤:

ios更新到16.3以上版本,连接蓝牙,无法返回advertisData信息

预期结果:

返回advertisData信息,解密出mac地址后进行蓝牙匹配连接

实际结果:

无法返回advertisData信息,无法连接蓝牙设备

bug描述:

苹果手机升级ios16.5后,蓝牙连接设备后无法返回advertisData信息,mac地址存在advertisData中,导致苹果手机无法连接设备,安卓手机可以正常连接


6 回复

大佬,想问下,我现在是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 文件中添加 NSBluetoothAlwaysUsageDescriptionNSBluetoothPeripheralUsageDescription 权限描述。
  • 在 UniApp 项目中,可以在 manifest.jsonios 配置中添加以下内容:
    "permissions": {
      "ios": {
        "NSBluetoothAlwaysUsageDescription": "请允许使用蓝牙以连接设备",
        "NSBluetoothPeripheralUsageDescription": "请允许使用蓝牙以连接设备"
      }
    }

2. 更新 UniApp 和 HBuilderX

  • 确保你的 UniApp 和 HBuilderX 是最新版本。开发者可能已经修复了与 iOS 16.5 及以上版本的兼容性问题。
  • 更新方法:
    • 打开 HBuilderX,点击菜单栏的 帮助 -> 检查更新
    • 更新 UniApp 项目依赖(如果有)。

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('未获取到广播数据');
      }
    });
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!