繁体   English   中英

如何在 ios 设备上检测独特的 ibeacon 广告 react-native?

[英]how to detect unique ibeacon advertisements react-native on ios device?

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

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

我目前正在使用kontakio react-native 库。 在 iOS 上,库不获取信标的 MAC 地址。 在 android 上,它获取信标设备的 MAC 地址。

这个想法是在列表中呈现这些,当用户选择一个时,它将存储在手机 memory 中,并且只查看来自该特定 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 地址。 无论您使用 Eddystone 还是 iBeacon 广告都是如此,因为:

  1. 除了信标 UUID/major/minor 之外,iOS 不提供对 iBeacon 广告标识符的访问。 它不提供对 MAC 的访问。
  2. iOS 不提供对 Eddystone 广告 MAC 的访问权限——它只提供对信标命名空间和实例 ID 的访问权限,以及一个“外围 id”,这是一个由 iOS 内部映射到蓝牙 MAC 地址的 32 位 UUID。 无法从外设 id 确定实际的 MAC。

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

如果由于某种原因您无法更改 IoT 设备上的信标标识符,那么您可以建立与设备的蓝牙连接并查询其 MAC 地址或其他唯一标识符。 Eddystone 广告将允许您访问建立连接以执行此操作所需的“外围设备 ID”。 但是,要使其工作,物联网设备必须支持连接(信标通常不可连接,但可能支持某些模式下的连接),并且必须公开对 MAC 或其他可读特征中的唯一标识符的访问。 可以想象物联网硬件支持这一点,但还不确定。 您需要查看硬件文档以了解您可以做什么,或者您需要控制 IoT 设备固件以使其执行您需要的操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM