【问题标题】:Is there a way to identify a BLE device in both Android and iOS有没有办法在 Android 和 iOS 中识别 BLE 设备
【发布时间】:2020-11-23 09:10:05
【问题描述】:

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

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

注意,在iOS的广告数据中,mac地址并没有公布,这些只是广告数据中的字段

kCBAdvDataIsConnectable

kCBAdvDataServiceUUIDs

kCBAdvDataTxPowerLevel

kCBAdvDataRxPrimaryPHY

kCBAdvDataLocalName

kCBAdvDataRxSecondaryPHY

kCBAdvDataTimestamp

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

【问题讨论】:

    标签: android ios bluetooth-lowenergy


    【解决方案1】:

    确实,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 在寻求安全、隐私和限制连接设备的使用案例时让您的生活变得困难,如果不是不可能的话应用程序。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 但是这两个值不一样,我的逻辑是把ble设备数据保存在数据库中,当我扫描发现ble设备时,如果数据库中存在它会自动连接,我想你的答案,但它会分别在 iOS 和 Android 中工作,我想要一个在两个平台上都可以找到的唯一标识符
      • 是的,他们会推迟,没有办法。也许将UUID 映射到android MAC 地址可能是另一种方法。
      • 我在一些资源中找到了该解决方案,但没有人提到如何做到这一点?!
      • 您应该保留单独的列或单独的表,其中包含设备 MAC 地址与 UUID 的映射。如果您使用的是 Room,则可以使用 @Relation 完成此映射。底线是映射应该是新表或仅适用于 android 的辅助列。
      猜你喜欢
      • 2019-11-30
      • 2018-11-09
      • 1970-01-01
      • 2016-11-05
      • 1970-01-01
      • 1970-01-01
      • 2018-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多