ios - iBeacon:根据您当前的位置唤醒应用程序

标签 ios objective-c iphone ibeacon region-monitoring

这是什么意思?

enter image description here

我写了一个应用程序,注册了一个特定的 iBeacon 区域监控。我运行该应用程序一次,以便它可以向 iOS 注册监控,但是,一旦我终止该应用程序并尝试对其进行测试(测试该应用程序是否在进入信标接近度时由 iOS 启动)

我注意到应用程序有时会被 iOS 成功唤醒(我添加了一个 UILocalNotification,当应用程序被唤醒时触发的选项键等于 UIApplicationLaunchOptionsLocationKey。我选择了进入时通知并在退出时通知监控首选项。

然而,当我关闭信标并双击主页按钮时,它会显示上图。当信标打开但没有触发通知时,它会保持这种状态很长时间。它有时会触发通知(但并非总是如此)。

为什么 iOS 会一直向我显示应用程序,即使它显然没有启动?是否保证应用程序在进入信标区域时始终启动? (我等了很长的 20 分钟。有时我会同时收到过去日期的通知。例如,30 分钟后我会收到截止日期为 30 分钟前的通知...)

if ([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey]) {
    [[DebugNotificationHandler sharedHandler] triggerMessage:@"AppDelegate: Triggered following iBeacon range"];

最佳答案

iOS 上的位置监控(包括信标监控)在应用未运行时也有效。这就是使 iOS 能够在进入/退出事件发生时唤醒或重新启动您的应用的原因。 p>

将信标监控视为“在后台”发生的事情是一种常见的误解/简化,但实际上它并不是这样工作的。您的应用程序仍然像任何其他应用程序一样处于暂停状态(使用后台模式的应用程序除外),并且容易因内存压力而被终止。 iOS 本身会不断扫描进入/退出,如果发生这种情况,会将它们传送到您的应用。

一个副作用是,即使您终止应用程序,基于位置的应用程序建议(例如您正在观察的应用程序切换器上的建议,但在锁定屏幕上还有一个图标)仍然有效。

要记住的另一件事是,iOS 只会在信标状态发生变化时重新启动您的应用。例如,如果您在运行应用程序的信标范围内,然后终止应用程序,应用程序切换器的底部栏将仍然存在,因为您仍在信标范围内,但应用程序将只有在超出范围时才会重新启动。

最后但同样重要的是,退出事件有 30 秒的内置延迟,即,您需要离开信标范围至少 30 秒,iOS 才能注册新状态为“超出”信标范围。如果您关闭信标,然后在几秒钟后将其打开,则不会记录任何状态更改,因此您的应用不会重新启动。

关于ios - iBeacon:根据您当前的位置唤醒应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33612841/

相关文章:

objective-c - NSNetServiceBrowser didRemoveService 在打开流后需要更长的时间

ios - 是否可以从 UIImagePickerController 拍摄多张照片?

iphone - 从不同线程访问 UIView 的简单快捷方式

ios - 布伦特里 iOS SDK : How to add a card

ios - NSObject 传递给 JavaScriptCore 后未释放

iphone - 如何在tableview上实现循环滚动

iphone - 在 iPhone 中绘制并填充矩形

iphone - slider 上的 TCP/IP 连接

ios - 这里映射 iOS SDK : Rotate the marker in Here maps

ios - Cordova 在后台自动启动