iBeacon 的自定义 UUID 冲突

iBeacon's customisable UUID conflicts

如果我的理解是正确的,specification - but then there's also this 中分配了大范围的 UUID。

既然iBeacon的UUID是可以自定义的,那UUID会不会和已有的代码冲突而造成不良后果呢?

如果我的理解是正确的,服务UUID在BLE数据包的字节30和31处,与iBeacon的UUID重叠。服务 UUID 只有 2 个字节,因此不难发生冲突。

您可能将 iBeacon UUID 与 16 位服务 UUID 混淆了。

iBeacon UUID 的长度为 16 字节(字节,不是位),这意味着有 2^(16 * 8) 种可能的组合。

那是 3.4 * 10^38,很多。甚至比阿伏加德罗常数还大。所以永远不应该发生碰撞。

另一方面,服务 UUID 只有 2^16 = 65,536 组合。但是蓝牙 SIG 管理这些以防止冲突。

当然可以,但是 128 位。很难让 2 个人通过随机过程生成相同的 UUID

如果您想随机生成一个,请在 OS X 终端上使用 uuidgen 命令。

了解蓝牙广告有两种类型很重要:

  • 服务广告
  • 厂商广告

广告必须是一种类型,不能是两种类型。

只有服务广告使用服务 UUID(16 位或 128 位)。制造商广告没有。制造商广告只有一个在蓝牙 SIG 注册的两字节公司代码。制造商广告中的其他所有内容都是任意数据。

像 AltBeacon 和 iBeacon 这样的信标类型是制造商的广告,因此它们不包含服务 UUID。因此,ProximityUUID 和 Service UUID 之间不可能存在重叠,它们是完全不同的东西。

Eddystone 和 Gimbal 等其他信标类型确实使用服务广告,这可能是造成混淆的原因。

iBeacon 广告和可发现服务广告的格式和内容有很大不同。因此,即使数据包末尾可能有一些字节具有相同的值,但数据包中的差异 headers 意味着这些字节的含义没有混淆