在 iOS 上检测非 iBeacon 信标?

detecting non-iBeacon beacons on iOS?

我目前正在做一个项目,其中有一部分与信标有关,因为我看到并阅读了不同的文章和网站,不建议使用非 ibeacon,因为 ios 可以检测到背景检测的时间和可访问性。我读了这篇文章: “” 所以基本上,我们可以使用 ibeacon 协议唤醒我们的 phone 然后使用我们的数据包,所以我的问题是在唤醒我们的 phone 之后我们如何使用我们自制的连接到我们的相关应用程序协议?我们必须为自己的数据包使用 CoreBluetooth 吗?如果是,它在 ios 可以多快检测到甚至权限方面有副作用吗?另一个问题是,在我们唤醒我们的 phone 之后,我们可以向我们的 iOS 发送多少字节?它仍然是一定数量吗?或者我们可以延长它?基本上,我们可以在第一个 ibeacon 数据包之后发送一个 100KB 的文件吗?

谢谢...

在 iOS,有两种截然不同的 API 可用于检测类似信标的蓝牙 LE 设备,每种都各有优缺点:

核心位置

优点:

  • 即使在后台也能进行非常快速的检测
  • 通过蓝牙 LE 信标检测唤醒您的应用程序
  • 信标用例更易于使用
  • 现成的信标很便宜,许多供应商都可以买到

缺点:

  • 您必须知道要检测的 16 字节 ProximityUUID 标识符
  • 除上述标识符外,只有四个数据字节(两个字节主要和两个字节次要)

核心蓝牙

优点:

  • 比 CoreLocation 灵活得多
  • 您可以在广告数据包中接收大约 20 字节的有用数据
  • 如果建立蓝牙 GATT 连接并交换多个数据包,您可以接收更多的数据。转100K当然可以

缺点:

  • 无法使用制造商广告在后台进行检测
  • 在后台检测服务广告很慢
  • 通常需要定制的信标(除非您使用的是 AltBeacon 或 Eddystone)
  • 不会让您阅读 iBeacon -- 它被 Apple 屏蔽了

您可以尝试通过组合两种 API 来两全其美。 您可以通过使用两种不同的硬件信标(一个 iBeacon,一个自定义)或一个硬件来做到这一点发出两种不同广告类型的信标。

这些技术的主要技巧是将两个广告关联起来,因为 iOS API 完全相互隔离,并且它们之间不能共享标识符.我通常采用的方法是 简单地使用 iBeacon 唤醒我的应用程序,然后让它开始扫描具有已知服务 UUID 的单独蓝牙 GATT 服务(在前台或背景)。找到它后,我会连接到它并使用它进行数据交换。使用这种技术,我不需要关联任何标识符。我只知道,如果我看到一个带有特定 ProximityUUID 的信标,那么这意味着附近应该有一个蓝牙 GATT 服务被宣传,我可以用它来进行数据交换。