ios - iOS后台信标监控

标签 ios swift bluetooth monitoring beacon

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

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

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

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

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

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

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

谢谢!

最佳答案

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

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

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

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

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

关于ios - iOS后台信标监控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43971650/

相关文章:

ios - 如何删除或清除 UITextField

objective-c - 消失的 NSMutableArray,导致 UiTableView 显示空白单元格

ios - Rect 中的逆 CGPath

java - 配对的设备未显示在列表中

android - 如何在 Android 中显示蓝牙设备选择器?

windows - 希望在 Windows 中编写等效的蓝牙 'hcitool'

ios - 如何在 iOS 中调暗/模糊给定矩形之外的所有内容?

swift - 任务完成的大中央调度检查

ios - 快速将公历日期选择器转换为波斯日期选择器?

swift - CAKeyframeAnimation 之后的 SCNNode 位置值不正确