iOS上后台的信标测距

iOS上后台的信标测距,ios,swift,Ios,Swift,我目前正试图找到一种在iOS中通过使用位置监控,然后触发测距的方式在后台对信标进行测距,如下所示: func locationManager(manager: CLLocationManager, didDetermineState state: CLRegionState, forRegion region: CLRegion) { if (state == .Inside) { locationManager.startRangingBeaconsInRegion((

我目前正试图找到一种在iOS中通过使用位置监控,然后触发测距的方式在后台对信标进行测距,如下所示:

func locationManager(manager: CLLocationManager, didDetermineState state: CLRegionState, forRegion region: CLRegion) {
    if (state == .Inside) {
        locationManager.startRangingBeaconsInRegion((region as? CLBeaconRegion)!)
    }
}
然后我尝试在beacon中进行API调用

func locationManager(manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], inRegion region: CLBeaconRegion) {
        for beacon in beacons {
            let minor = beacon.minor as Int
            let major = beacon.major as Int
            do {
                try APICall.canSeeBeacons(major, minor: minor)
            } catch {
                print("Error making API call")
            }
        }
    }

然而,当手机在后台时,这只工作了大约十分钟,十分钟后它就不再工作了,但我希望它能连续工作,这样当找到信标时,API调用就可以一直进行。我的权限中也设置了正确的密钥,我正在locationManager上使用requestAlwaysAuthorization()

查看苹果iOS开发库中有关后台执行的内容:

如果应用程序的类型是可接受的较长后台执行类型之一,请使用数组将键
所需的后台模式添加到
Info.plist
,该数组包含一个或多个启用类型:
音频
位置
voip
报摊内容
外部附件
和/或
蓝牙中心

请注意,在应用商店上发布你的应用程序之前,苹果将对此进行审查

编辑:

我有一段时间没有使用它了,但是现在已经测试过了,它似乎比Xcode 6更容易使用。 按照以下步骤操作:

1.将键
所需的背景模式添加到您的
Info.plist

2.转到
功能

3.选择适合的背景模式。
我也有同样的问题。正如一位评论员所说,我已将location manager委派方法移动到应用程序委派中。我还补充说:

locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false

它可以正常工作。

我已经在info.plist中设置好了所需的背景模式,但仍然存在十分钟后什么也不做的问题。你看到我编辑了答案了吗?另外,10分钟后,它将在后台继续,直到任务运行,然后可以挂起。例如,如果在某一点上,它不再监视当前位置或不再播放音乐等。您是否试图在10分钟内对单个信标进行测距,或者在10分钟后没有收到区域进入/退出事件时遇到问题?@Paulw11这只是区域进入,我需要应用程序在检测到附近有信标时拨打电话。什么级别的位置管理器占用了您的位置?应用程序委派或视图控制器?@Paulw11视图控制器正在保存位置管理器您应该尝试将其作为应用程序委派的属性保存,并在那里处理区域事件。使用NSNotifications通知viewcontroller