当两个应用监控同一个 iBeacon 区域时会发生啥?

Posted

技术标签:

【中文标题】当两个应用监控同一个 iBeacon 区域时会发生啥?【英文标题】:What happens when two apps monitor the same iBeacon region?当两个应用监控同一个 iBeacon 区域时会发生什么? 【发布时间】:2014-05-22 11:49:44 【问题描述】:

ios7.1 开始,无需在前台或后台打开应用即可监控 iBeacon 区域。虽然这更像是实验室情况而不是现实世界的问题,但我想知道当两个 iOS 应用程序都注册以在后台监视 same iBeacon 区域时会发生什么。比方说,两个应用都设置为在输入特定区域时触发本地通知...

在这种情况下是否有任何预期/记录的行为?例如。 1)两个应用程序都会被触发? 2)只有最后一个注册的应用程序会被触发? 3) 等等。

【问题讨论】:

【参考方案1】:

这两个应用程序都将被触发。我不认为 Apple 文档中明确说明了这一点,但根据设计,所有应用程序都是沙盒化的,并且除非文档另有说明,否则它们应该独立运行。

我可以根据经验确认这是它的工作方式,因为我的公司制作了许多 iBeacon 应用程序,并且它们最初是为 Radius Networks 的信标使用相同的默认 UUID/major/minor 构建的。因此,当我在其中一个信标附近打开我的 iPhone 时,我会收到多个通知,每个应用程序都针对同一区域进行监控。

【讨论】:

【参考方案2】:

两个应用都会被触发。我的房子里有一些信标,如果我在进入或离开时没有关闭蓝牙,我会为我正在处理的每个应用程序收到一个通知......:p

【讨论】:

【参考方案3】:

我也可以确认 Alexander Vasenin 所说的话。我在 iOS 9.0.2 上测试过。

如果您的情况允许,您可以通过将其中一个应用设置为使用更“严格”的区域来“绕过”此问题,例如:

    应用程序:CLBeaconRegion *beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:@"identifier"];

    应用程序:CLBeaconRegion *beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid major:69 identifier:@"identifier"];

【讨论】:

【参考方案4】:

@Alexander Vasenin:我可以确认这一点。 似乎有一个 ios 8.3 问题,没有 2 个应用程序可以监视 SAME 区域。在这种情况下,只有一个应用会收到响应。

【讨论】:

【参考方案5】:

虽然通常通过多个应用程序监控同一个 iBeacon 区域效果很好,但昨天我们遇到了麻烦。我们的两个设备拒绝调用以下任何回调:

- locationManager:didDetermineState:forRegion:
- locationManager:didEnterRegion:
- locationManager:didExitRegion:
- locationManager:monitoringDidFailForRegion:withError:

而其他两个工作完美无缺。我们花了几个小时找出问题所在,但问题只有在我们删除了旧的概念验证应用程序后才解决,该应用程序正在监控相同(或几乎相同,我不确定关于这个)来自两个设备的 iBeacon 区域。

有趣的是,在我自己的设备上,我也有那个旧的概念验证应用程序,两个应用程序都可以完美运行。

【讨论】:

以上是关于当两个应用监控同一个 iBeacon 区域时会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

iBeacon(Kontakt Beacon)区域监控在android

基于 UUID 监控 iBeacon 区域时,何时收到通知?

iBeacon 监控不适用于 Cordova-plugin-ibeacon

区域监控时检测 iBeacon 需要多长时间?

从 Appdelegate 设置 iBeacon 操作和监控

iOS 在后台监控/测距信标会消耗大量电池