是否可以搜索iBeacons
附近的所有内容?我知道可以iBeacons
通过 UUID 进行搜索。但我想找到iBeacons
附近的所有东西。
5 回答
iBeacon 是一个区域,具有 UUID 作为定义属性。因此,您只能搜索与 UUID 匹配的那些。在您找到一个或多个具有特定 UUID 的设备后,您可以使用委托回调确定哪个最接近,其中信标存储在按距离排序的数组中。
有很好的示例代码,还有一个非常详细的 WWDC 视频会议:“核心位置的新功能”
iBeacon 是比常规 BLE 外设更高级别的结构。从 Apple 文档中可以确定,信标与其服务 UUID 相关联。即,一系列信标是一个“区域”,您根据信标对您的范围和可见性进出一个区域,而不是相反。不幸的是,Apple 使用了术语区域,我们大多数人可能将其与 MapKit 相关联,所以这增加了普遍的混淆
坏消息是:您只能扫描您知道的 ProximityUUID,没有“通配符”proximityUUID。此外,CLBeacons 不会以较低级别的 CoreBluetooth 胆量的方式暴露太多,因此如果您想找到碰巧在您附近的所有信标,您必须使用 CoreBluetooth,扫描外围设备,然后查看返回的外围设备并查询他们每个人以找到信标。当然,Apple 既没有注册(通过蓝牙 SIG)也没有(还)发布了 iBeacon 特性,因此,您需要一个 BT 嗅探器来逆向工程从任何其他 BLE 设备构成 iBeacon 的内容。
每个 APP 都会使用它自己的特定 UUID,使用“主要”和“次要”整数值来区分信标。
例如,UUID 将与连锁店相关联,major 将标识商店,minor 将与过道甚至一组产品相关联。
扫描未知的 UUID 不会很有用,因为您的应用程序不知道如何处理这些信息。
使用终端中的“uuidgen”命令一劳永逸地生成 UUID。
遗憾的是,没有与信标实际通信的协议,因此没有标准来获取信标的位置或任何其他有用的信息。
如果我们可以打开与信标的连接,通常是最近的一个,并从中获取额外的数据,而不必在同一个 WIFI 网络上,那就更好了。
您要么必须使用 bonjour 通过 WIFI 与设备通信,要么使用主要和次要 id 从某种网络服务获取数据。
不幸的是,您目前无法在不知道proximityUUID 值的情况下搜索任意iBeacon。我试过直接写信给 COREBluetooth,虽然你可以发现并连接到你所在地区的传输信标,但你得到的只是与 BLE UUID 无关的乱码。因此,您甚至无法确认您连接的外围设备实际上是 iBeacon。
这似乎不是 BLE 规范的限制,而是 Apple 施加的限制。Android 平台似乎也不存在此限制。
在这个差距缩小之前,Android 在这方面将比 iOS 拥有显着优势。
我不同意之前的评论,即扫描 UUID 将毫无用处。相反,如果您知道信标 UUID,您可以在云中创建信标/位置/主题的地图,并使用 Web 服务使用它来导航(假设信标是固定的)。您可以众包数据,以便最终所有想要编写位置应用程序的人都可以使用非常丰富的信标 UUID/位置对数据库。也许这就是苹果隐藏信息的原因;他们可能出于自己的目的而保留了这一点。
根据 Radius Networks(AltBeacon规范和android-beacon-library 的作者,无法使用 CoreBluetooth 识别信标