我们可以在 iOS 上检测到非 iBeacon 信标吗?

Posted

技术标签:

【中文标题】我们可以在 iOS 上检测到非 iBeacon 信标吗?【英文标题】:Can we detect non-iBeacon beacons on iOS? 【发布时间】:2016-03-10 21:46:10 【问题描述】:

我和我的团队正在开发一个信标,我们需要用它来与用户 iPhone 上的应用程序对话。由于我们需要应用程序检测信标并执行代码以与我们的 API 对话,即使在被杀死时,我们也无法使用 CoreBluetooth 并且需要作为信标操作。

我们正在尝试在 BCM20737S BLE 模块上制作自定义信标。是否可以让这个自定义信标作为信标与 iPhone 上的应用程序通信? (CoreLocation 框架)

谢谢!

【问题讨论】:

【参考方案1】:

只要您的数据包使用 iBeacon 协议广播数据包,核心定位就可以检测到它,并且您的应用将根据检测到的信号唤醒。 iBeacon 协议包是一个 25 字节的有效载荷,设置为 BLE 广告中的制造商数据字段。

    公司ID为2字节(0x004C) 类型为1字节(0x02) 数据长度为 1 字节 (0x015) Proximity UUID 是一个 16 字节的十六进制字符串 主要是2字节uint16_t 次要为 2 个字节 uint16_t 测量功率为 1 字节 int8_t

这个堆栈线程可能对你有用。

What is the iBeacon Bluetooth Profile

但本质上,corelocation 仅针对 ibeacons 配置,如果您想传输不同的协议数据包,则需要在 ios 上使用 CoreBluetooth,然后在收到数据包后,以某种方式将其翻译以供您的应用使用。

【讨论】:

【参考方案2】:

CoreLocation 框架只会检测 iBeacon,即符合 iBeacon 字节格式的信标。 您当然可以构建自己的,虽然它不必是经过 Apple 官方认证的 iBeacon,但它必须与字节模式匹配。这种模式在 Internet 上随处可见,即使您没有注册获得该规范的权利的 Apple 认证计划。

请注意,不要对字节模式进行任何更改。一些供应商已经构建了信标传输,将额外的字节附加到末尾以发送电池电量。虽然检测到这些传输,但检测速度要慢得多,因为标头具有不同的长度字段,这与用于在后台快速检测的硬件过滤器不匹配。

如果您想自定义信标格式,则必须使用 CoreBluetooth 进行检测。我写了一些开源的iOS beacon tools 来帮助做到这一点,使用开源的AltBeacon 和Eddystone-UID 格式作为例子。虽然如您所说,后台检测速度较慢,但​​您可以让信标同时传输 iBeacon 信号(以快速唤醒您的应用程序)和自定义信标信号(发送您想要的任何自定义字段),以便尽快检测到被唤醒。 即使您定义了自己的自定义信标格式,也可以通过这种方式进行快速检测。

【讨论】:

以上是关于我们可以在 iOS 上检测到非 iBeacon 信标吗?的主要内容,如果未能解决你的问题,请参考以下文章

检测 iBeacons 的延迟

如何在 iOS、Swift 中搜索 iBeacons UUID,并扫描周围的所有 iBeacons

IOS:iBeacon 检测后可用的操作

屏幕关闭时如何在 iOS 应用程序中检测 iBeacon?

IOS:手机锁定时iBeacon扫描频率?

设备重启后的 IOS8 iBeacon 监控