根据iBeacon spec,iBeacons必须在广告制造商数据中广播0x004C作为公司ID。 0x004c
是Apple'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。
即使我希望确保0x02
和0x15
在哪里,并且设备无法连接,并且制造数据的确切长度,这似乎也不会出现确定无疑。
如何明确识别iBeacon?
答案 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数据包。