是否可以在iBeacon应用程序上动态设置UUID?

时间:2016-04-20 23:41:10

标签: core-location ibeacon ibeacon-android android-ibeacon google-beacon-platform

我有一个信标设备,它根据自定义轮换方案广播不同的UUID值。

通常,开发人员必须设置静态UUID才能被应用程序识别(例如iOS):

CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:uuid major:major minor:minor identifier:identifier];

我想知道是否有办法动态生成(或从服务器接收)要识别的UUID。

话虽如此,我仍然难以理解iOS和Android如何理解信标的内部机制。根据我的理解,手机的BLE模块将所有结构良好的iBeacons转发到操作系统,维护着一系列已识别的UUID。经过简单的查找,如果找到匹配项,操作系统会将相应的应用程序带到前台。

但是,应用程序识别的UUID何时在操作系统中注册?他们多久重新注册一次?如果有人愿意向我指出任何相关的在线材料或者至少提及这个过程中涉及的机制,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

在Android和iOS上注册信标ProximityUUID ,以检测仅仅是应用蓝牙数据包的过滤器,与信标和ProximityUUID的字节模式匹配。重要的区别在于,在 iOS 上进行过滤的操作系统框架,CoreLocation,会对过滤器造成严重限制。 iOS限制包括:

  • 对于单个应用,您在任何给定时间只能监控20个UUID。
  • 受监控的前30个UUID的设备范围限制获得硬件辅助快速检测。后来注册的UUID变慢(后台几分钟的延迟)检测。
  • 您无法监控任何UUID(全局通配符)

但是,您可以随时更改应用正在监控的20个UUID - 甚至每隔几秒钟一次。诀窍是你的应用程序必须在前台才能执行此操作,或者允许在后台运行以执行此UUID轮换。

要在iOS上注册UUID以进行监控,您只需声明具有该UUID的区域(通常不指定主要和次要值)然后调用

[locationManager startMonitoringForRegion:region];

要避免超过20个区域的限制,您还必须致电:

[locationManager stopMonitoringForRegion:oldRegion];

在旧区域,您不再需要监控。否则,如果超过20限制,您将无法在新注册的地区进行检测。

当然,您可以使用网络服务为新区域提供UUID 进行监控。

在Android上它更简单 - 您可以使用Android Beacon Library和类似的SDK指定全局通配符来监控所有UUID。

完全披露:我是Android Beacon Library的首席开发人员,这是该平台上的第一个灯塔实施。