连接到 iBeacon

Posted

技术标签:

【中文标题】连接到 iBeacon【英文标题】:Connect to iBeacon 【发布时间】:2017-04-09 22:24:09 【问题描述】:

我可以通过以下方式扫描 iBeacons:

func locationManager(manager: CLLocationManager!, didRangeBeacons beacons: [AnyObject]!, inRegion region: CLBeaconRegion!) 

  

假设我在扫描后得到以下信标

Beacon 1: major:1 minor:5 uuid:xxx
Beacon 2: major:1 minor:6 uuid:xxx
Beacon 3: major:1 minor:7 uuid:xxx

扫描后,我想连接到信标 2 并更改其特征。

我知道我可以使用 CoreBluetooth 扫描并连接到蓝牙设备并更改其特性,但问题是如何通过 Core Bluetooth 识别哪个设备是信标 2?

【问题讨论】:

【参考方案1】:

您无法获得将CLBeaconCBPeripheral 直接相关的任何信息。

通常,信标的 GATT 服务会公开一个“设备名称”特征,您可以向用户显示该特征,以允许他们从列表中选择要配置的设备。

正如 David 在 cmets 中指出的那样,任何此类 GATT 服务都将是特定于供应商的,或者甚至可能不存在,而信标是通过其他方法配置的,例如 USB。即使提供了 GATT 服务,也可以通过配置将其禁用,或者仅在初始开机后的有限时间内有效。

没有定义通用的“配置 iBeacon”服务。

【讨论】:

补充保罗的回答,并非所有信标都具有可连接的 GATT 服务。一些制造商确实提供了此配置,但您不能使用 CoreLocation API。您必须使用 CoreBluetooth API。你如何做的细节都是特定于供应商的。询问您的信标制造商是否有公共配置 GATT 服务的文档。您无法将信标检测与 CoreBluetooth 设备相关联。不幸的是,Apple 阻止了这一点。 我得到的是没有办法将 CLBeacon 与 CBPeripheral 关联起来,为了将两者关联起来,我需要连接所有信标并一一检查,然后识别正确的信标,因为我正在使用信标还通过 gatt 公开其主要/次要/uuid。但是如果我有更多像 20+ 这样的信标,这种方法是没用的 正如大卫所说,这取决于你的信标;有些人可能会通过他们的 GATT 服务公开一个有用的名称。没有配置信标的标准方法 另一种可行的方法是使用 uuid 、major、minor 广告自定义有效负载 agter 一定间隔,并在用户单击特定 ibeacon 时通过 CBPeripheral 连接它时同时进行 CLBeacon 和 CBPeripheral 扫描 如果您有 200 或 100 个信标的列表,则连接到信标不是一个好的选择。我认为广播两种类型的信标很好 1. ibeacon 和 2.custom 信标(包含uuid、major、minor 并以特定间隔广播,并且可以使用 Corebluetooth 进行扫描),当我想连接到特定的 i beacon 时,通过等效的 CBPeripheral 连接。

以上是关于连接到 iBeacon的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 impyla 连接到 impala 或使用 pyhive 连接到 hive?

连接到连接到服务器的生物识别设备

MySQL Workbench 连接到 AWS,收到错误“无法连接到本地主机”

MySQL Workbench 无法连接到我的 RDS 数据库:无法连接到 localhost

无法连接到虚拟机怎么解决?怎么解决?

SQL SERVER2008无法连接到服务器