iBeacon是否必须使用Apple的公司ID?如果没有,如何识别iBeacon?

时间:2017-04-08 23:24:41

标签: bluetooth ibeacon

根据iBeacon spec,iBeacons必须在广告制造商数据中广播0x004C作为公司ID。 0x004cApple's company ID as assigned by the Bluetooth SIG

我对此感到困惑,因为除了公司ID之外,似乎没有任何其他数据明确地将BLE设备识别为iBeacon。接下来的两个字节固定为0x02和0x15,其余字节取决于配置。

有一次,我认为如果mfg数据的前四个字节是0x4c 0x00 0x02 0x15,那么它就是一个iBeacon。然后,我找到了使用其他公司ID的iBeacons。例如,我使用北欧半导体的iBeacon样本,使用0x59 0x00,这是Nordic的公司ID。

即使我希望确保0x020x15在哪里,并且设备无法连接,并且制造数据的确切长度,这似乎也不会出现确定无疑。

如何明确识别iBeacon?

3 个答案:

答案 0 :(得分:0)

您可以看到the byte sequence of an iBeacon transmission in my answer here.

底线是,确切的标题(包括公司代码)必须与iOS一样,将广告解释为iBeacon传输,并使用iOS CoreLocation API返回结果。如果是使用不同的公司代码,这些API根本无法检测到它们。尽管不同的公司制造符合iBeacon规范的信标,但所有公司都使用Apple公司代码。

一些芯片制造商使用不同的公司标识符(例如Nordic Semiconductor 0x59 0x00)提供示例代码的事实可能只是绕过知识产权限制的一种方式。 Apple坚持认为那些将其产品推向iBeacon兼容产品的人签署了一份协议,称他们不会透露规格。 Nordic可能会尝试通过更改示例代码中的公司标识符来遵守此协议。无论原因如何,事实仍然是iOS设备不会将此类传输解释为具有意外公司代码的iBeacon数据包。

答案 1 :(得分:-1)

由于没有标准定义" beacon",不同的制造商有自己的广告格式。因此,您必须编制要捕捉的广告模式列表。每家公司都定义了他们的数据意味着什么,所以只看制造商数据中的前2个字节不起作用,因为某些公司可能会使用前缀0x02,0x15作为其他内容。

答案 2 :(得分:-1)

您可以下载iBeacon规范here(需要接受许可协议)。

规范声明公司ID:

  

不得用于Apple未指定的任何用途。

将这2个字节用于识别制造商的预期目的是可以接受的。使用这2个字节来广播附加信息可能不属于许可协议范围。

规范中包含的信息应该足以帮助您。如果在各自的位置看到长度为0x1A和0x02,0x15,则很可能是iBeacon数据包。