iOS 和 Android 无需连接即可访问的蓝牙设备是不是有唯一标识符?

Posted

技术标签:

【中文标题】iOS 和 Android 无需连接即可访问的蓝牙设备是不是有唯一标识符?【英文标题】:Is there a unique identifier for a Bluetooth device accessible to iOS and Android without connecting?iOS 和 Android 无需连接即可访问的蓝牙设备是否有唯一标识符? 【发布时间】:2015-12-17 16:51:15 【问题描述】:

我们正在创建一个蓝牙硬件设备,并希望在数据库中存储一个唯一标识符,以便多个用户不会尝试连接到同一设备。有一个android和一个ios应用程序。

据我了解,在 iOS 中您无法访问 MAC 地址,并且提供的 UUID 是在 iOS 端生成的。我们可以添加一个提供 UUID 的特性,但是有没有办法在 iOS 和 Android 上拥有一致的标识符而无需连接到蓝牙设备?

【问题讨论】:

你找到解决办法了吗? 不完全是。我认为道格的答案是可能的最佳解决方案。 【参考方案1】:

如果您可以控制硬件及其所宣传的内容,那么您可以将 mac 地址(或其他一些唯一标识符)作为服务数据或制造商特定数据包含在内。请参阅 Android L 或更高版本上的https://developer.android.com/reference/android/bluetooth/le/ScanRecord.html。对于较低的Android版本,您必须自己解析扫描记录,这有点痛苦。

对于 iOS,请参见此处:https://***.com/a/25392156/4248895

要在 Android 上快速验证概念,您可以使用 SweetBlue,它会在后台为您处理不同的操作系统版本。见:

http://idevicesinc.com/sweetblue/docs/api/com/idevicesinc/sweetblue/BleManagerConfig.ScanFilter.ScanEvent.html#serviceDatahttp://idevicesinc.com/sweetblue/docs/api/com/idevicesinc/sweetblue/BleManagerConfig.ScanFilter.ScanEvent.html#manufacturerData

【讨论】:

如果您无法控制外围设备(在 iOS 上)? ://【参考方案2】:

对于 iOS: BLE 设备可以在其广告数据中广告服务 UUID。

[myPeripheralManager startAdvertising:@ CBAdvertisementDataServiceUUIDsKey :
    @[myFirstService.UUID, mySecondService.UUID] ];

在你的iOS APP中,你可以扫描指定服务UUID的设备:

[myCentralManager scanForPeripheralsWithServices:@[myFirstService.UUID, mySecondService.UUID] options:nil];   

您的 APP 只会发现这些服务 UUID 的 BLE 设备。

【讨论】:

我可以获得服务 UUID。我正在寻找的是设备的 UUID,因此我可以区分具有相同服务的两个设备。 @jeremiah 在“可选 func centralManager(_ central: CBCentralManager, didDiscoverPeripheral peripheral: CBPeripheral, AdvertisementData AdvertisementData: [String : AnyObject], RSSI RSSI: NSNumber)”中,你得到了外设,所以你得到了设备的 UUID,即“peripheral.identifier”。

以上是关于iOS 和 Android 无需连接即可访问的蓝牙设备是不是有唯一标识符?的主要内容,如果未能解决你的问题,请参考以下文章

Android 4.4:低功耗蓝牙;无需扫描 BLE 设备即可连接

无需打开插座即可连接蓝牙设备

我们可以使用蓝牙重新连接断开的外围设备而无需再次扫描 ios

从安卓设备通过蓝牙广播消息

Mac 上的蓝牙 RSSI/查询扫描 - 无需连接即可检测到 iPhone?

是否可以连接蓝牙设备,而无需在 iOS 中配对?