这是什么意思?
我已经编写了一个已注册特定iBeacon区域监控的应用程序。我运行应用程序一次,因此它可以注册到iOS监控,但是,一旦我终止应用程序并尝试测试它(测试应用程序是否在iOS进入信标接近时启动)
我注意到iOS有时会成功唤醒应用程序(我添加了一个UILocalNotification,当应用程序被唤醒时,选项键等于 UIApplicationLaunchOptionsLocationKey 时会触发。我选择了条目时通知并在退出时通知监控首选项。
然而,当我关闭信标并双击主页按钮时,它会显示上图。它持续了很长一段时间,而灯塔开启但没有触发通知。它确实会触发通知(但并非总是如此)。
为什么iOS会继续向我显示应用程序,即使它显然没有启动?是否可以确保在进入信标区域时始终启动应用程序? (我等了很长时间20分钟..有时我会收到过去约会的通知......例如30分钟后我收到通知,截止日期为30分钟......)
if ([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey]) {
[[DebugNotificationHandler sharedHandler] triggerMessage:@"AppDelegate: Triggered following iBeacon range"];
答案 0 :(得分:1)
iOS上的位置监控(包括信标监控)也适用于应用未运行的情况。这是使iOS能够在进入/退出事件时唤醒或重新启动应用的原因发生的情况。
将灯塔监控视为在后台发生的事情,这是一种常见的误解/简化,"但实际上并不是这样。您的应用程序仍然像任何其他应用程序一样被暂停(除了使用后台模式的应用程序),并且由于内存压力而容易被终止。它的iOS本身一直在扫描进入/退出,如果它们发生,则将它们发送到您的应用程序。
即使你终止应用程序,一个副作用是基于位置的应用程序建议(例如你正在观察的应用程序切换器上的建议,但锁定屏幕上还有一个图标)还在工作。
要记住的另一件事是, iOS只会在信标状态发生变化时重新启动您的应用。例如,如果你在应用程序正在运行的信标范围内,然后终止应用程序,应用程序切换器上的底栏仍然会在那里,因为你仍然在信标范围内,但只有当你超出范围时才会重新启动应用程序。
最后但并非最不重要的是,退出事件具有30秒的内置延迟,即,您需要超出信标范围至少30秒才能让iOS注册新的国家作为"外部"信标的范围。如果您关闭信标,然后在几秒钟之后将其打开,则不会注册任何状态更改,因此您的应用程序将无法重新启动。