1

根据 iOS 文档,当使用 BLE 作为外围设备的 iOS 应用程序进入后台模式时,外围设备名称不会被公布,并且所有服务 UUID 都放置在一个特殊的“溢出”区域,它们只能被 iOS 设备发现,该设备是明确地扫描它们。

当应用程序在后台时,我嗅探了无线发送的 BLE 数据包。没有本地名称和服务 UUID 数据。有一个对服务 UUID 进行编码的“溢出”区域。可以在这里找到一个简短的讨论:https ://github.com/crownstone/bluenet-ios-basic-localization/blob/master/BROADCASTING_AS_BEACON.md

我想知道是否有任何方法可以从“溢出”区域的数据中确定广告的实际服务 UUID。iOS 文档指出,当一个应用程序在后台宣传为 BLE 外围设备时,另一个 iOS 应用程序可以通过明确指定要扫描的服务 UUID 来找到它。因此,必须有一种方法可以从溢出数据中找出实际的 UUID。

对此的任何指示都会有所帮助。

4

1 回答 1

0

不会。溢出区域中的数据是散列的(发送几个 128 位 UUID 对于广告数据包来说太大了)。我不相信散列被记录在案,但我强烈怀疑它是基于布隆过滤器的,因此苹果可以概率性地将无限数量的 UUID 打包到广告数据包的非常有限的空间中。

所有这一切的好处是,这意味着广告数据包中不存在数据(实际上不可能存在)。您将需要连接到设备以发现其服务。

于 2019-03-18T14:30:56.687 回答