已终止的应用程序无法通过 iBeacon 数据包唤醒
Terminated App not wakeup with iBeacon packet
可以iOS
在睡眠状态下接收iBeacon
数据包并唤醒应用程序吗?
我关闭了一个应用程序并重新启动,然后让 phone 处于睡眠模式。设备重启时设备处于信标区域,我在重启后保持设备屏幕关闭。
我的 iOS
应用没有唤醒,所以我怀疑它没有收到 iBeacon
数据包。
我检查了系统日志,发现 didEnterRegion
过程没有被调用。
如果应用程序被强制终止,应用程序唤醒是否有效?iOS
是否在重启和立即睡眠状态下收到 iBeacon
数据包?
如果我打开屏幕,它会立即开始工作,但如果屏幕在重启后关闭,则它不会收到 iBeacon
数据包。
是的,iOS CoreLocation 将在区域进入或区域退出时启动您的应用程序,即使在 iOS 7.1.1 之后强制终止后也能正常工作。如果您在 AppDelegate 的 didFinishLaunchingWithOptions
方法中设置了 CLLocationManagerDelegate
,您将只会得到适当的回调。如果您不在该方法中进行设置,那么 CoreLocation 将不知道在应用启动后进行回调。
在应用重启时测试入口事件可能有点棘手,因此这里有一些避免陷阱的提示:
如果您的应用认为它是 "outside" 上次 运行 的区域,这一点至关重要。如果它是"inside"上次运行时的区域,它不一定会得到另一个入口回调,因为它会认为它从未离开过。测试时,请绝对确保在 终止应用程序或重启之前收到 didExit
回调或 didDetermineState
回调,表明它超出区域 。使用 NSLog
语句、本地通知或添加到应用程序屏幕的某些自定义 UI 指示器来验证这一点。
如果您重新启动 iOS 设备,CoreLocation 不会立即完全初始化 -- 我发现屏幕亮起后需要 5 分钟才能收到任何回调。请务必等待足够长的时间。
一旦 CoreLocation 完全初始化,区域进入事件通常会在信标进入范围后的一秒内发生。然而,如果有限的蓝牙硬件辅助模式插槽在设备上都已满(如果您有一些其他信标应用程序已全部使用它们,通常会发生这种情况),则进入事件会回退到每 10 分钟或仅发生一次的软件扫描更多的。在这种情况下,进入事件可能需要那么长时间。在假设它不起作用之前,请确保您等待足够长的时间。
可以iOS
在睡眠状态下接收iBeacon
数据包并唤醒应用程序吗?
我关闭了一个应用程序并重新启动,然后让 phone 处于睡眠模式。设备重启时设备处于信标区域,我在重启后保持设备屏幕关闭。
我的 iOS
应用没有唤醒,所以我怀疑它没有收到 iBeacon
数据包。
我检查了系统日志,发现 didEnterRegion
过程没有被调用。
如果应用程序被强制终止,应用程序唤醒是否有效?iOS
是否在重启和立即睡眠状态下收到 iBeacon
数据包?
如果我打开屏幕,它会立即开始工作,但如果屏幕在重启后关闭,则它不会收到 iBeacon
数据包。
是的,iOS CoreLocation 将在区域进入或区域退出时启动您的应用程序,即使在 iOS 7.1.1 之后强制终止后也能正常工作。如果您在 AppDelegate 的 didFinishLaunchingWithOptions
方法中设置了 CLLocationManagerDelegate
,您将只会得到适当的回调。如果您不在该方法中进行设置,那么 CoreLocation 将不知道在应用启动后进行回调。
在应用重启时测试入口事件可能有点棘手,因此这里有一些避免陷阱的提示:
如果您的应用认为它是 "outside" 上次 运行 的区域,这一点至关重要。如果它是"inside"上次运行时的区域,它不一定会得到另一个入口回调,因为它会认为它从未离开过。测试时,请绝对确保在 终止应用程序或重启之前收到
didExit
回调或didDetermineState
回调,表明它超出区域 。使用NSLog
语句、本地通知或添加到应用程序屏幕的某些自定义 UI 指示器来验证这一点。如果您重新启动 iOS 设备,CoreLocation 不会立即完全初始化 -- 我发现屏幕亮起后需要 5 分钟才能收到任何回调。请务必等待足够长的时间。
一旦 CoreLocation 完全初始化,区域进入事件通常会在信标进入范围后的一秒内发生。然而,如果有限的蓝牙硬件辅助模式插槽在设备上都已满(如果您有一些其他信标应用程序已全部使用它们,通常会发生这种情况),则进入事件会回退到每 10 分钟或仅发生一次的软件扫描更多的。在这种情况下,进入事件可能需要那么长时间。在假设它不起作用之前,请确保您等待足够长的时间。