当应用程序在后台时从信标接收信号

Receive signal from beacon while app is in the background

我有一个与信标交互的 iOS 应用程序。 还有一个功能来检测来自信标的信号,如果信号超出范围,我想在数据库中存储一些东西(在这种情况下是核心数据)

    func updateDistance(distance: CLProximity) {
    UIView.animateWithDuration(1.0) { [unowned self] in
        switch distance {
        case .Unknown:
            self.view.backgroundColor = UIColor.grayColor()
            self.distanceReading.text = "No Beacon Signal Detected"
            updateDatabaseWithLocation()

        }
    }
}

因此,只要应用 运行 在前台,该应用就可以正常运行。 我的理解是,当用户没有积极使用该应用程序时,我也可以在后台运行该应用程序,但仍会从信标获得信号。 如果是这样,我该如何完成这项任务?
我在 info.plist 中添加了以下内容,但仍然没有用。
也可以更新数据库吗?

当应用程序为 运行 时,您只能 范围信标 (这使您可以访问距离近似值)。一旦您离开该应用程序(按主页按钮,导航到另一个应用程序等),iOS 将暂停该应用程序,并且测距将停止工作。在后台持续使用蓝牙无线电会很快耗尽智能手机的电池。

但是,您可以让您的应用程序订阅在智能手机进入和退出信标(或一组信标)范围时被唤醒到后台。这称为 区域监控 ,它与地理围栏使用的机制相同。

现在,"enter" 和 "exit" 事件本身不会让您获得距离近似值。但是,由于 iOS 会将您的应用程序唤醒到后台几秒钟以处理这些事件,因此 ranging 实际上会在这段时间内恢复(假设您之前没有停止它该应用程序已暂停),然后 iOS 使该应用程序再次进入休眠状态。

您甚至可以使用 background execution task 将 "few seconds" 延长至几分钟。

以上所有都不需要使用后台模式——只需要 "always" 授权即可使用定位服务。

您通常无法使用信标无限期地将应用程序 运行 保留在后台。后台支持受到 Apple 的严格监管,并且仅允许用于例如导航应用程序或音乐应用程序。人们有时会尝试使用 "location" 后台模式来让应用程序在后台保持活动状态(因此能够测距信标),甚至有人报告说能够通过审查流程,但这似乎是更多的是例外而不是规则。

如果您决定尝试一下,您需要:

即使您离开应用程序 运行,它也应将其保留在后台。