小编cml*_*oyd的帖子

通过iBeacon监控和测距与CoreBluetooth scanForPeripheralsWithServices检测信标

关于iOS对想要扫描BLE信标\外设的应用程序所施加的限制存在很多困惑.在阅读了几篇博客和Stack Overflow答案之后,我想看看我是否正确理解了所有问题.如果有什么我误解或错过了,请纠正我.我只提到iOS 7及更高版本,专注于检测而不是连接(你能使用iBeacon Monitoring&Ranging API连接到CLBeacon吗?).

信标的选项很明确 - 使用通用BLE外设或使用以iBeacon格式通告的BLE外设(此外,非标准外设可以在adv-packet中以iBeacon格式进行通告,并在扫描响应包).

一般限制

  • iBeacon Ranging会让你知道你周围的信标.您必须指定信标预先通告的ProximityUUID(无"一般"扫描).didRangeBeacons将使用最近找到的CLBeacon对象数组每秒调用一次.距离信标的距离及其准确度由iOS使用一些机密算法计算,只有Apple的开发人员才知道(该算法基于rssi值和信标所宣传的rssi-at-1米校准字节).每次进入或退出某个区域时,您也可以使用iBeacon Monitoring来呼叫代理 - 您必须再次指定您要查找的ProximityUUID(您还可以指定主要和次要)."退出某个地区"的定义是一段时间没有收到任何广告,因此不能立即进行.每台设备可以同时监控的区域数量 限制为20 - 这意味着如果其他应用同时监控\范围,您的应用可能无法监控\范围(对吗?).
  • CoreBluetooth - 您还可以检测信标广告中的其他广告结构.如果信标也以iBeacon格式进行广告,您无法看到iBeacon字段(ProximityUUID,主要,次要......),尽管它们是在标准的"制造商特定"广告结构下发送的,您可以在其他情况下看到.

在前台运行 - 限制较少的用例:

  • iBeacon测距和监控 - 没有进一步的限制.
  • CoreBluetooth - Passing nil in the serviceUUIDs of scanForPeripheralsWithServices will scan for all peripherals. Passing CBCentralManagerScanOptionAllowDuplicatesKey as YES in the options will make the didDiscoverPeripheral to be called multiple times for the same peripheral\beacon (I assume that using a timer you detect the advertisement was not received for …

ios core-bluetooth bluetooth-lowenergy ibeacon

19
推荐指数
1
解决办法
7176
查看次数