任何 iBeacon 接近 UUID 的应用回调

Posted

技术标签:

【中文标题】任何 iBeacon 接近 UUID 的应用回调【英文标题】:App callback for any iBeacon proximity UUID 【发布时间】:2015-04-16 01:47:10 【问题描述】:

我玩过 Airlocate 和两部 iPhone。也在 Linux /hcitool 信标发射器和 Airlocate 测距之间。我看到要跟踪的一组邻近 UUID 是硬编码在 Airlocate 源代码中的。

ios 应用位于任何 iBeacon(任何邻近 UUID)附近时,是否有可能获得更通用的回调,并让该应用决定如何以它想要的方式行事。

我知道从操作系统的角度来看这绝对是可能的,因为我在 PDU 的开头看到了一个 9 字节的 iBeacon 前缀,它与邻近 UUID 无关。

另一个查询 - 我将 APP 中的邻近 UUID 硬编码视为某种配对。一般蓝牙配对与此有何不同。

我提出这些问题的目的是了解使用信标传送(广播)数据的可行性,以便附近的所有接收者都能接收到它。如果我选择使用特定的 16 字节邻近 UUID,那么我只剩下 5 个字节(主要/次要/功率)来发送数据。否则我得到 21 个字节

【问题讨论】:

iOS 中的核心位置库要求您(至少)指定信标的 UUID 以及可选的主要和次要值。这些定义了一个“区域”,您一次可以监控 20 个区域。 iBeacon 的典型用例是使用应用程序识别某个位置,然后将此信息提供给某些服务以检索数据 【参考方案1】:

通过“更通用的回调”,您似乎正在尝试收听不是由您部署的 iBeacons。答案是否定的,你不能那样做。

根据这篇文章:http://beekn.net/2013/10/ibeacons-can-my-ios-app-find-beacons-that-arent-mine/ ,要收听 iBeacon,您必须首先知道它的邻近 UUID。 不幸的是,Apple 决定限制您这样做的能力。 CoreBluetooth 框架可以检测附近的 iBeacon,但由于它只返回设备 UUID,而不是接近 UUID,因此您无法向它们添加回调。

并且android可以毫无问题地读取任何iBeacon的proximityUUID。

【讨论】:

这对 iOS 来说是正确的。为了澄清更多,CoreLocation 不会在没有首先指定 ProximityUUID 的情况下给您任何回调。 CoreBluetooth,同时过滤掉所有 iBeacon 传输,因此您根本无法读取它们。在这里阅读更多:developer.radiusnetworks.com/2013/10/21/… 我从您的回答中得知,我无法使用核心定位获得我想要的东西,即如果我的 BLE 发射器在 PDU 的数据部分传输 9 字节 iBeacon 前缀。现在我的问题是 - 如果我不放 iBeacon 前缀,我可以使用 CoreBluetooth 获得任何蓝牙广告(信标而不是 iBeacons)的回调 - 还是我必须指定 6 字节设备 MAC(位于标头之间和 PDU 中的数据)以获取回调。 核心蓝牙框架不会询问您的 iBeacon 接近 UUID,它可以扫描附近的所有广播 BT 设备,是的,它会给您一个已扫描设备的回调。 对@CraigZheng 的评论稍加补充——CoreBluetooth 可以扫描附近所有正在广播的BTLE 设备。我确实意识到上下文表明 LE 是正在讨论的内容(毕竟 iBeacons 是 LE 构造),但考虑到 LE 和经典之间的区别,以及新手经常遇到的困惑,明确指出这可能是有用的,如果不是为了OP,然后为后续读者。 澄清:CoreBluetooth 仅在您的应用处于前台时为您提供制造商广告的回调

以上是关于任何 iBeacon 接近 UUID 的应用回调的主要内容,如果未能解决你的问题,请参考以下文章

iBeacons - locationManager:didEnterRegion 回调和 UUID

在后台使用 iBeacon 或 CoreBluetooth 识别 iOS 设备

如何在不知道 UUID、任何可能获得核心蓝牙或其他方式的情况下检测 iBeacons

使用 CLLocationManager 获取 iBeacon 邻近度更新

对于具有不同 UUID、major 和 minor 的多个 iBeacon,仅触发一次 didEnterRegion 事件

iOS 7-iBeacon:当应用程序关闭时,如何从 iBeacon 获取比其 UUID 更多的数据?