在iOS上检测非iBeacon信标?

时间:2017-04-18 17:27:53

标签: ios bluetooth-lowenergy ibeacon iot

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

...谢谢

1 个答案:

答案 0 :(得分:2)

在iOS上,有两种非常不同的API可用于检测类似信标的蓝牙LE设备,每种设备都有自己的优点:

CoreLocation

优点:

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

缺点:

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

<强> CoreBluetooth

优点:

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

缺点:

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

您可以尝试通过组合这两种API来充分利用这两个方面。您可以通过使用两个不同的硬件信标(一个iBeacon,一个自定义)或一个发送两个硬件信标来实现此目的不同的广告类型。

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