如何在ios设备上检测独特的ibeacon广告反应



我有物联网设备(紧急手表(,当设备上的按钮被触发时,它会发送iBeacon广告,我在我的react原生应用程序上检测到这些信号。

我面临的问题是区分哪个信号属于哪个物联网设备。

我目前正在使用kontakio react原生库。在iOS上,库不会获取信标的MAC地址。在安卓系统上,它获取信标设备的MAC地址。

这个想法是将这些内容呈现在列表中,当用户选择一个时,它将存储在手机存储器中,并且只查看来自该特定mac地址的紧急呼叫。

以下是迄今为止的代码逻辑:

if (isAndroid) {
DeviceEventEmitter.addListener(
'beaconsDidUpdate',
async ({beacons, region}) => {
const pairedBeacon = await getDataFromStorage();
beacons.map(b => {
if (
b.proximity == 'IMMEDIATE' ||
b.proximity == 'NEAR' 
) {
setList(beacons);
}
if (b.address == pairedBeacon) {
emergencyCall();
}
});
},
);
} else {
kontaktEmitter.addListener(
'didRangeBeacons',
async ({beacons, region}) => {
beacons.map(b => {
if (
b.proximity == 'immediate' ||
b.proximity == 'near'
) {
setList(beacons);
}
});
},
);

你知道我如何在iOS端解决这个问题吗?我们非常感谢您的帮助。

最好的解决方案是配置物联网设备,为每个设备发送一个唯一的信标标识符,这样您就可以依赖信标标识符而不是MAC地址。这是真的,无论你是使用埃迪斯通还是iBeacon广告,因为:

  1. iOS除了信标UUID/major/minor之外,不提供对iBeacon广告标识符的访问。它不提供对MAC的访问
  2. iOS不为Eddystone广告提供对MAC的访问——它只提供对信标命名空间和实例ID的访问,加上一个";外围id";其是由iOS内部映射到蓝牙MAC地址的32位UUID。无法根据外围设备id确定实际MAC

无论您使用的是React Native还是Kontakt.io的库,上述限制都是正确的。这是一个操作系统限制。

如果您由于某种原因无法更改物联网设备上的信标标识符,那么您可以建立与设备的蓝牙连接,并查询其MAC地址或其他唯一标识符。埃迪斯通的广告将允许您访问";外围id";需要建立连接才能做到这一点。然而,为了实现这一点,物联网设备必须支持连接(信标通常不可连接,但在某些模式下可能支持连接(,并且必须以可读特性公开对MAC或其他唯一标识符的访问。物联网硬件支持这一点是可以想象的,但还远不能确定。你需要查看硬件文档,看看你能做什么,或者你需要控制物联网设备固件,让它做你需要的事情。

最新更新