后台信标监控 iOS

Beacon monitoring in background iOS

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

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

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

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

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

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

我一直在努力寻找 "iOS beacon convention" 在我的研究中,只是提供一些结果的例子。不太确定什么才是正确的做法。

谢谢!

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

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

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

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

无论哪种方式,从 didFinishLaunching 方法触发监视开始是至关重要的。如果您的应用程序通过区域转换自动启动,这将确保正确的后台 CoreLocation 设置。