【问题标题】:BLE: Advertising local name and service UUID from background iOSBLE:从后台 iOS 广告本地名称和服务 UUID
【发布时间】:2019-08-08 22:25:10
【问题描述】:

根据 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。

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

【问题讨论】:

    标签: ios background core-bluetooth cbperipheralmanager bluetooth-peripheral


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢 Rob,我尝试连接到外围设备以发现其服务。但似乎 iOS 不允许在应用处于后台时连接外围设备。
    • 您通常可以在后台连接到已知外围设备,并且当宣传您正在寻找的服务的外围设备进入范围时,您可以被唤醒。在任何情况下,您都无法在后台扫描任意设备(与这种特殊情况无关)。这里的用例是什么?
    • 用例:iOS 应用程序需要在后台将自己宣传为 BLE 外围设备。非 iOS Central 应该能够在后台扫描并连接到外围广告
    • 这是一个很好的用例……我不知道这是否可能。我现在明白您所说的“在应用程序处于后台时允许连接到外围设备”是什么意思。你的意思是连接到iPhone。在我自己的工作中,我总是走另一条路;让 iPhone 接触到宣传该服务的设备。如果您尝试做的事情是不可能的,我不会感到惊讶。
    猜你喜欢
    • 2017-12-31
    • 1970-01-01
    • 2021-08-02
    • 2020-08-17
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多