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



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

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

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

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

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

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

在Android和iOS上,注册信标接近UUID进行检测无非是在与信标和邻近UUID的字节模式匹配的蓝牙数据包上应用过滤器。 重要的区别在于,在iOS上,执行过滤的操作系统框架CoreLocation对您可以拥有的过滤器施加了严格的限制。 iOS 限制包括:

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

但是,您可以随时更改应用正在监视的 20 个 UUID,甚至每隔几秒钟更改一次。 诀窍是,你的应用必须位于前台才能执行此操作,或者具有允许在后台运行的方式才能执行此操作 UUID 旋转。

要注册 UUID 以在 iOS 上进行监视,只需使用该 UUID 声明一个区域(通常不指定主要和次要值),然后调用

[locationManager startMonitoringForRegion:region];

为了防止超过您的 20 个区域限制,您还必须致电:

[locationManager stopMonitoringForRegion:oldRegion];

在旧区域上,您不想再监视了。 否则,如果超过 20 个限制,将不会在新注册的区域上获得检测。

当然,您可以使用 Web 服务为新区域提供要监视的 UUID

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

完全披露: 我是 Android 信标库的首席开发人员, 该平台上的第一个信标实现.

最新更新