我正在Swift中开发一个监控信标事件的iOS应用程序。这是我第一次真正的灯塔努力。
我正在使用Estimote信标,但我没有使用Estimote SDK。我正在使用核心位置和带有didExit和didEnter事件的CLLocationManager。
我只是在监听已登录到我的应用的当前用户注册的信标。例如,John Doe可以在信标A和B中注册,而Mary Sue只注册到信标C.我遇到了很多假叶子,并且想知道是不是因为我在实现我的代码。
我知道在验证离开事件时有默认的30秒延迟,但是我遇到的时间超过30秒而没有来自点空白范围的蓝牙信号。也许实施一个30分钟的窗口而不是30秒的休假验证?
由于用户必须登录才能知道要监控的信标,因此位置管理器位于用户的默认配置文件视图控制器中。即使手机被锁定,我也成功获得了信标交互,但这并不一致。我很担心,因为我知道视图控制器本身是由iPhone自行决定暂停/激活的,并且可能揭示了我逻辑中的缺陷。
是否应将所有面向位置的代码放在app委托文件中?如果我将我的配置文件视图中的协议实现到应用程序委托,我可以先在应用程序委托中实例化它,然后在用户登录后再检索信标数据。
我一直在努力寻找一个" iOS beacon convention"在我的研究中,只是提供一些结果的例子。不太确定什么是实际上认为适当的做法。
谢谢!
答案 0 :(得分:1)
如果输入事件很快发生,通常使用软件过滤器来忽略虚假区域退出事件。
要使其独立于任何一个ViewController,重要的是让AppDelegate触发逻辑。这里有两个选择:
直接在AppDelegate中放置区域监控回调和过滤逻辑。这适用于小型和简单的应用程序。
将回调和过滤逻辑放在自定义类中,并从AppDelegate的didFinishLaunching方法初始化。这是更大,更复杂的应用程序保持AppDelegate简单清洁的最佳方法
无论哪种方式,从didFinishLaunching方法触发监控是至关重要的。这可以确保在应用程序通过区域转换自动启动时正确设置背景CoreLocation。