iOS和Android是否有一种不需连接即可获取的蓝牙设备唯一标识符?

5
我们正在制作一款蓝牙硬件设备,并希望将唯一标识符存储在数据库中,以确保多个用户不会尝试连接到同一设备。有一个Android和一个iOS应用程序。
据我了解,在iOS中,您无法访问MAC地址,提供的UUID是在iOS端生成的。我们可以添加一个特性来提供UUID,但是否有办法在iOS和Android上具有一致的标识符,而无需连接到蓝牙设备呢?

你找到解决方案了吗? - yusufonderd
不完全是。我认为当可能时,道格的答案是最好的解决方案。 - Jeremiah
2个回答

6
如果您可以控制硬件及其广告,那么您可以将MAC地址(或其他唯一标识符)作为服务数据或制造商特定数据包含在内。请参见Android L或更高版本上的https://developer.android.com/reference/android/bluetooth/le/ScanRecord.html。对于较低版本的Android,您需要自己解析扫描记录,这有点麻烦。

iOS的情况请看这里:https://dev59.com/B4Lba4cB1Zd3GeqPhKE9#25392156

如果您想在Android上进行快速概念验证,则可以使用SweetBlue,它可以在底层为您处理不同的操作系统版本。请参见:

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


如果您无法控制外围设备(在iOS上)怎么办? :/ - User

0

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

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

在你的iOS应用中,你可以扫描具有指定服务UUID的设备:

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

您的应用程序将仅发现这些服务UUID的BLE设备。


我可以获取服务UUID。我正在寻找的是设备UUID,以便区分具有相同服务的两个设备。 - Jeremiah
@jeremiah 在 "optional func centralManager(_ central: CBCentralManager, didDiscoverPeripheral peripheral: CBPeripheral, advertisementData advertisementData: [String : AnyObject], RSSI RSSI: NSNumber)" 中,你已经获取了外设(peripheral),因此你也得到了设备的UUID,即"peripheral.identifier"。 - wj2061

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接