在 iOS 上检测非 iBeacon 信标?

faf*_*a92 1 ios bluetooth-lowenergy ibeacon iot

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

谢谢...

dav*_*ung 5

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

核心位置

优点:

  • 即使在后台也能快速检测
  • 通过蓝牙 LE 信标检测唤醒您的应用
  • 用于信标用例要简单得多
  • 现成的信标很便宜,并且可以从许多供应商处获得

缺点:

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

核心蓝牙

优点:

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

缺点:

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

您可以尝试通过组合两个 API 来获得两全其美。 您可以通过使用两个不同的硬件信标(一个 iBeacon,一个自定义)或一个发送两种不同广告类型的硬件信标来执行此操作。

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