Swift 中的信标检测

Beacon Detection in Swift

我正在 swift 构建一个应用程序,它可以帮助我检测信标并显示它们的 RSSI 值。我正在使用苹果的原生 CoreLocations 库来检测信标,但注意到检测速率设置为 1 秒并且无法更改。有没有办法将检测间隔缩短到 100-500 毫秒,以便我可以获得更多的 RSSI 值?

您还可以使用 CoreBluetooth APIs 来检测信标,这会为您检测到的每个数据包提供单独的 RSSI 测量值。对于每秒 10 次的信标广告,这将使您大约每 100 毫秒更新一次 RSSI。

使用 CoreBluetooth 有两个大问题:

  1. 它无法检测到 iBeacon,因为 Apple 阻止了它。 CoreBluetooth 可以检测 AltBeacon 和 Eddystone。

  2. API 更难与信标一起使用 — 您必须手动从数据包中解析出标识符。

此外,请注意,CoreLocation 每秒返回一次的 RSSI 值实际上是基于前一秒接收到的所有数据包的平均值,因此它比以更高频率采集的单个样本更稳定。根据您想要样本的用途,您可能会发现较高的变化是个问题。

最后,请注意使用 CoreBluetooth 获取样本的最大速率取决于信标传输速率。一些信标每秒只广播一次。如果您正在使用这样的信标,您将不会再使用 CoreBluetooth 获得任何样本。