信标测距与 BLE 扫描

Posted

技术标签:

【中文标题】信标测距与 BLE 扫描【英文标题】:Beacon ranging vs BLE scanning 【发布时间】:2019-08-24 19:03:03 【问题描述】:

我试图了解信标测距和 BLE 扫描之间的区别。据我了解,信标测距使用 BLE 扫描来查找信标。最重要的是,它使用信号强度(我不需要)计算信标的接近度。我只需要检测信标(类似于信标监控)。由于 ios 中的 Always 权限要求,我没有使用信标监控。我知道与测距相比,信标监控得到了高度优化,但我想知道测距与 BLE 扫描相比如何。

我可以使用BLEModule.scanForDevices(UUID) 代替CLLocationManager.startRangingBeacons(region) 来检测信标吗?如果是,我可以在检测到信标时以类似方式获得回调吗?

在电池性能或检测时间等方面这样做有什么缺点吗?

请注意,我愿意在没有接近信息(与信标的距离)的情况下凑合。

还有一个相关的问题:

在 iOS 中是否可以在具有 WhenInUse 权限的情况下在前台使用信标监控?(我在最初的调查中发现了不同的看法)

【问题讨论】:

【参考方案1】:

您无法使用 Core 蓝牙扫描来检测 iBeacon。您必须使用核心位置并监控 CLBeaconRegion 才能发现 iBeacons。

发现信标后,您无需对其进行范围设置。

如Apple's documentation中所述

重要

应用必须始终具有使用区域监控的授权,并且必须配置位置更新后台模式才能启动。

即使您只希望在应用处于前台时通知信标,您也必须请求始终权限。

【讨论】:

我要补充一点,您不能使用 BLE 扫描的主要原因是 Apple 阻止访问作为 iBeacon 帧的 BLE 数据包的扫描数据有效负载。 CoreBluetooth 实际上使广告数据显示为空(实际上并非如此)。Apple 这样做是为了强制您使用 CoreLocation。 @davidgyoung,感谢您的解释。所以我想在我的应用程序中执行以下操作: 1. 使用信标监控发现 BLE 设备(如果我没有获得 Always 权限,则进行 BLE 扫描) 2. 使用 GATT 与设备交换信息。在这里,该设备旨在成为带有 BLE 芯片的微控制器。可以将 BLE 芯片配置为同时发布信标并公开 GATT 服务吗?这可以在同一个广告包中完成吗? 听起来你只是想识别一个正在宣传 GATT 服务的 BLE 外围设备;不需要 iBeacon。没有简单的方法可以将 iBeacon 发现和 Core 蓝牙外围设备联系起来;信标的 UUID 只是您分配的一个数字,您无法获取信标或 GATT 外围设备的 MAC 地址。 @Paulw11 - 感谢您的回复。信标测距与 BLE 扫描呢?即,如果我想从我的应用程序中发现一个 BLE 设备,我应该从该设备宣传信标并使用信标测距吗?或者我应该通过宣传其 GATT 配置文件来发现该设备。我问这个是因为这是为了从我的应用程序中发现设备,并且在用户进入设备范围并检测到设备之前,测距/扫描可能会持续一天以上。在这种情况下,与信标测距相比,BLE 扫描会影响电池性能吗?

以上是关于信标测距与 BLE 扫描的主要内容,如果未能解决你的问题,请参考以下文章

在iOS中测距和监控时如何获取信标的MAC地址

如何仅使用 CoreBluetooth 扫描信标

Cordova:在后台模式下扫描 iBeacons / BLE(iOS 和 Android)

iBeacons 在 iOS 中以后台模式扫描?

在 BLE 中随机化 Mac 地址

书面问题 CBCharacteristic