有没有办法在 Android 和 iOS 中识别 BLE 设备

Oma*_*din 5 android ios bluetooth-lowenergy

我知道如何通过调用来获取 Android 中 BLE 设备的 MAC 地址addressBleDevice bleDevice.address 我没有找到获取设备 UUID 的方法

另一方面,在 iOS 中,我可以通过调用来获取设备的 UUID identifierCBPeripheral peripheral.identifier 但我没有找到获取 mac 地址的方法。

请注意,iOS 中的广告数据中不会广告 mac 地址,这些只是广告数据中的字段

kCBAdvDataIsConnectable

kCBAdvDataServiceUUID

kCBAdvDataTxPowerLevel

kCBAdvDataRxPrimaryPHY

kCBAdvDataLocalName

kCBAdvDataRxSecondaryPHY

kCBAdvData时间戳

我的问题是我需要一个可以在 Android 和 iOS 中使用的标识符来识别我的 ble 设备

ana*_*abi 5

事实上,iOS MAC-> UUID 问题是一个长期存在的问题(通过搜索,您会看到许多关于该问题的线程)。

不幸的是,解决方案没有简单的好消息,只有一些潜在的解决方案......这里是一个摘要,希望其中一条路径可能适合您:

iOS 隐藏 MAC 地址并为您随机生成一个 UUID。您可以将 UUID 存储在手机上,但它对于该手机来说是唯一的。如果我们都有 iPhone 并扫描相同的外围设备,我们会看到不同的 UUID。iOS 在设备上生成 UUID 并隐藏 MAC 地址。

事实上,iOS MAC-> UUID 问题是一个长期存在的问题(通过搜索,您会看到许多关于该问题的线程)。

为了让生活更轻松,某些设备会在其辅助广告数据包中或设备制造商数据中的唯一设备标识符中添加部分或全部 MAC 地址,并从 iOS 中的广告中读取此信息......如果您是控制设备固件,然后我会添加这个...当然,如果这是另一方的设备,那么您将受到他们实施的摆布。

另一种可能的途径是使用 GATT 设备信息服务(服务 UUID:0x180a)。在此服务下,有一个序列号字符串(分配的 UUID:0x2A25)特征,可以保存特定于蓝牙低功耗设备的序列号。但请注意,这是可选的,并非所有 BLE 配置文件都会有它,您必须先连接到设备才能检索此信息,这可能不适合您的使用模式。

特定设备可能有其他独特的专有标识符,这些标识符在广告数据或特征中公开

如果您谈论的是 iBeacon,那么广告中的 ibeacon GUID 和蓝牙地址实际上是相同的值。

当我为自定义 BLE 设备实现固件时,我总是将 6 字节 MAC 地址添加到广告制造商数据中。有些设备会这样做(或者其他一些不像“Thermometer1020”那样唯一的标识符,其中 1020 希望是唯一的)。但你再次受到设备广告内容的摆布。

如果您正在寻找适用于各种 BLE 设备和供应商的解决方案,那么不幸的是,Apple 在追求安全性、隐私性和限制连接设备应用程序的使用案例方面,即使不是不可能,也让您的生活变得困难。


Nik*_*ski 2

在 Android 中,BLE 设备通过其硬件地址来区分。CBPeripheral.identifier属性似乎仅适用于 iOS 以及它们的外设管理器如何识别和分配设备。也许你的实现应该使用String作为公分母,对于 iOS 应该返回identifier,对于 Android bleDevice.address