【问题标题】:Search for all iBeacons and not just with specific UUID搜索所有 iBeacons 而不仅仅是特定的 UUID
【发布时间】:2013-09-18 00:31:01
【问题描述】:

是否可以搜索附近的所有iBeacons?我知道可以通过 UUID 搜索 iBeacons。但我想在附近找到所有iBeacons

【问题讨论】:

  • 出于安全原因,API 不允许这样的调用,但我可以看到这会非常有趣。一种想法是对 iBeacon 规范进行逆向工程,扫描附近的所有外围设备,然后查看广播的广告是否是 iBeacon。不幸的是,Apple 尚未发布 iBeacon 规范。但似乎他们使用广告中的编码信息来创建 iBeacon。因为 iBeacon 的 UUID 将是随机的,除非您是 Apple,否则您能否仅从广告中确定外围设备是否是 iBeacon 令人怀疑。
  • 我有一个 Mac 应用程序,它对调试很有用,但它不能在 iOS 设备上运行...如果你有兴趣,可以在这里找到它:github.com/liamnichols/iBeaconScanner
  • 我制作了一个可以在 iOS 设备上运行的应用(需要越狱):malcolmhall.com/products/ibeaconscanner

标签: core-location ios7 ibeacon


【解决方案1】:

iBeacon 是一个区域,具有 UUID 作为定义属性。因此,您只能搜索与 UUID 匹配的那些。 在您找到一个或多个具有特定 UUID 的设备后,您可以使用委托回调确定哪个最接近,其中信标存储在按距离排序的数组中。

有很好的示例代码,还有一个非常详细的 WWDC 视频会议:“核心位置的新功能”

【讨论】:

  • 我也搜索了一些示例代码。您在开发站点的哪里找到此代码?
  • developer.apple.com/downloads/index.action 这是从顶部算起的第 5 个链接。您想下载“Airlocate”示例。
  • 我编写了一个非常简单的应用程序来演示 iBeacons API 的工作原理:github.com/nicktoumpelis/HiBeacons。希望有用。
  • 您可以在 Anroid 上执行此操作,但不能在 iOS 上执行此操作。这里详细讨论了为什么这在 iOS 上是不可能的:developer.radiusnetworks.com/2013/10/21/…
  • @NickToumpelis 我非常感谢你。这么多谢谢。这对我非常有帮助。谢了。
【解决方案2】:

iBeacon 是比常规 BLE 外设更高级别的结构。从 Apple 文档中可以确定,信标与其服务 UUID 相关联。即,一系列信标是一个“区域”,您根据信标对您的范围和可见性进出一个区域,而不是相反。不幸的是,Apple 使用了术语区域,我们大多数人可能将其与 MapKit 相关联,所以这增加了普遍的混乱

这里有个坏消息:您只能扫描您知道的 ProximityUUID,没有“通配符”proximityUUID。此外,CLBeacons 不会以较低级别的 CoreBluetooth 胆量的方式暴露太多,因此如果您想找到碰巧在您附近的所有信标,您必须使用 CoreBluetooth,扫描外围设备,然后查看返回的外围设备并查询他们每个人以找到信标。当然,Apple 既没有注册(通过蓝牙 SIG)也没有(还)发布了 iBeacon 特性,因此,您需要一个 BT 嗅探器来逆向工程从任何其他 BLE 设备构成 iBeacon 的内容。

【讨论】:

【解决方案3】:

每个 APP 将使用它自己的特定 UUID,使用“主要”和“次要”整数值来区分信标。

例如,UUID 将与连锁店相关联,major 将标识商店,minor 将标识过道,甚至是一组产品。

扫描未知的 UUID 不会很有用,因为您的应用不知道如何处理这些信息。

使用终端中的“uuidgen”命令一劳永逸地生成 UUID。

遗憾的是,没有与信标实际通信的协议,因此没有标准来获取信标的位置或任何其他有用的信息。

如果我们可以打开一个到信标的连接,通常是最近的一个,并从中获取额外的数据,而不必在同一个 WIFI 网络上,那就更好了。

您要么必须使用 bonjour 通过 WIFI 与设备通信,要么使用主要和次要 id 从某种网络服务获取数据。

【讨论】:

  • "扫描未知的 UUID 不会很有用,因为您的应用程序不知道如何处理这些信息。"这是非常错误的,因为有时需要在没有任何上下文的情况下查看所有信标
【解决方案4】:

不幸的是,您目前无法在不知道proximityUUID 值的情况下搜索任意iBeacon。我试过直接写信给 COREBluetooth,虽然你可以发现并连接到你所在地区的传输信标,但你得到的只是与 BLE UUID 无关的乱码。因此,您甚至无法确认您连接的外围设备实际上是 iBeacon。

这似乎不是 BLE 规范的限制,而是 Apple 施加的限制。 Android 平台似乎也不存在此限制。

在缩小这一差距之前,Android 在这方面将比 iOS 拥有显着优势。

我不同意以前的 cmets 扫描 UUID 是没有用的。相反,如果您知道信标 UUID,您可以在云中创建信标/位置/主题的地图,并使用 Web 服务使用它来导航(假设信标是固定的)。您可以众包数据,以便最终所有想要编写位置应用程序的人都可以使用非常丰富的信标 UUID/位置对数据库。也许这就是苹果隐藏信息的原因;他们可能出于自己的目的而保留了这一点。

【讨论】:

    【解决方案5】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      • 2019-10-17
      • 1970-01-01
      • 1970-01-01
      • 2019-06-19
      • 2017-01-02
      • 2013-07-31
      相关资源
      最近更新 更多