终止的应用程序无法通过iBeacon数据包唤醒

时间:2018-08-12 17:38:29

标签: ios ibeacon wakeup

(45 units)是否可以在睡眠状态下接收(70 units)数据包并唤醒应用程序?

我杀死了一个应用程序并重新启动,然后将手机置于睡眠模式。重新启动设备时,该设备位于信标区域,重新启动后我保持设备屏幕关闭。 我的iOS应用未唤醒,因此我怀疑它没有收到iBeacon数据包。

我检查了系统日志,发现没有调用iOS过程。

在强制终止应用程序的情况下,应用唤醒可以工作吗?iBeacon是否在重启和立即进入睡眠状态时收到didEnterRegion数据包?

如果我打开屏幕,它将立即开始工作,但是如果屏幕在重启后关闭,则不会收到iOS数据包。

1 个答案:

答案 0 :(得分:1)

是的,iOS CoreLocation会在区域入口或区域出口启动您的应用程序,即使在iOS 7.1.1之后强制终止后仍能正常运行。如果您在AppDelegate的CLLocationManagerDelegate方法中设置了didFinishLaunchingWithOptions,则只会得到适当的回调。如果您未在该方法中进行设置,则CoreLocation将不知道在应用启动后进行回调。

在应用重新启动期间测试进入事件可能会有些棘手,因此这里有一些避免陷阱的提示:

  1. 如果至关重要,则您的应用程序会认为它在上次运行时位于该区域之外。如果它在上次运行时位于该区域“内部”,则它不一定会获得另一个条目回调,因为它将认为它永远不会离开。在测试时,请绝对确保在退出{strong>之前,您杀死了该应用程序或重新启动,得到了didExit回调或didDetermineState回调,该回调表明它不在区域中。使用NSLog语句,本地通知或添加到应用程序屏幕的一些自定义UI指示器来对此进行验证。

  2. 如果您重新启动iOS设备,CoreLocation不会立即完全初始化-我已经看到屏幕打开后需要5分钟才能收到任何回调。确保等待足够长的时间。

  3. 一旦CoreLocation被完全初始化,区域进入事件通常在信标进入范围后的一秒钟内发生。但是,如果有限的蓝牙硬件辅助模式插槽在设备上已全部装满(通常,如果您还有其他几个都使用了它们的信标应用程序,则会发生这种情况),则进入事件会退回到仅每10分钟或更多。在这种情况下,进入事件可能需要花费很长时间。确保等待足够长的时间,然后再假设它不起作用。