【问题标题】:Beacon monitoring in background iOSiOS 后台信标监控
【发布时间】:2017-05-15 04:35:55
【问题描述】:

我正在用 Swift 开发一个 iOS 应用程序来监控信标事件。这是我第一次真正的信标尝试。

我正在使用 Estimote 信标,但没有使用 Estimote SDK。我正在使用核心位置和带有 didExit 和 didEnter 事件的 CLLocationManager。

我只监听登录到我的应用的当前用户注册的信标。例如,John Doe 可以注册到信标 A 和 B,而 Mary Sue 只注册到信标 C。我遇到了很多假叶子,想知道是不是因为我在哪里实现了我的代码。

我了解在验证休假事件时默认有 30 秒的延迟,但我遇到了超过 30 秒的时间段,而没有来自点空白范围的蓝牙信号。也许实施一个 30 分钟的窗口而不是 30 秒的休假验证?

由于用户必须登录才能知道要监控哪些信标,因此位置管理器驻留在用户的默认配置文件视图控制器中。即使手机被锁定,我也成功获得了信标交互,但并不一致。我很担心,因为我知道视图控制器本身是由 iPhone 自行决定暂停/激活的,并且可能会暴露我的逻辑缺陷。

是否应将所有面向位置的代码放在应用委托文件中?如果我从我的配置文件视图到应用程序委托实现了一个协议,我可以先在应用程序委托中实例化它,然后在用户登录后检索信标数据。

在我的研究中,我一直在努力寻找“iOS 信标约定”,只是提供一些结果的示例。不太确定实际上什么是正确的做法。

谢谢!

【问题讨论】:

  • 您必须将您目前所做的代码提供给我们,然后我们才能为您提供一些解决方案。

标签: ios swift bluetooth monitoring beacon


【解决方案1】:

如果进入事件很快发生,则通常使用软件过滤器来忽略虚假区域退出事件。

要使其独立于任何一个 ViewController,让 AppDelegate 触发的逻辑很重要。这里有两个选择:

  • 将区域监控回调和过滤逻辑直接放在 AppDelegate 中。这适用于小型和简单的应用程序。

  • 将回调和过滤器逻辑放在自定义类中,并从 AppDelegate 的 didFinishLaunching 方法对其进行初始化。 这是较大和更复杂的应用程序保持 AppDelegate 简单和干净的最佳方法.

无论哪种方式,从 didFinishLaunching 方法触发开始监控至关重要。这样可以确保在您的应用通过区域转换自动启动时正确设置后台 CoreLocation。

【讨论】:

  • 正是我需要听到的。非常感谢。
  • 有什么特殊的技术可以监控多个区域吗?
  • 多个区域不会更改上述设置,但您应该了解,当您的应用不活动时导致进入或退出的第一个区域将是启动它到后台的区域。后续区域进入退出只会导致回调已经运行的应用程序,而不会调用 didFinishLaunching。
  • 是否可以监控 2 个区域,每个区域都有唯一的 UUID,并让位置管理器通知您进入/退出他们的区域?我的 CLLocationManager 或 ESTBeaconMananager 尝试没有成功。在测试时,您不能让两个具有不同 UUID 的信标彼此靠近吗?
  • 这应该可以完美运行,并且根据我的经验。如果您可以制作一个简单的可重现测试用例并显示您的代码,我建议您提出一个新问题。
猜你喜欢
  • 1970-01-01
  • 2016-11-22
  • 2021-11-21
  • 1970-01-01
  • 2019-02-11
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多