也许这是一个愚蠢的问题,但我真的无法在任何地方找到答案。我想让我的iOS应用程序在后台运行时向Web服务器发送位置更新。目前它不起作用,我知道原因是因为allowBackgroundLocationUpdates默认设置为NO。 我的问题是在哪里可以/应该将allowsBackgroundLocationUpdates设置为YES?
编辑:让我补充一点,我已经修改了我的Info.plist以包括:所需的背景模式 - 用于位置更新的应用寄存器
答案 0 :(得分:1)
希望我理解你的问题, 首先,您需要获得用户的许可,调用 requestAlwaysAuthorization()方法
Apple的代码示例:
let locationManager = CLLocationManager()
func enableLocationServices() {
locationManager.delegate = self
switch CLLocationManager.authorizationStatus() {
case .notDetermined:
// Request when-in-use authorization initially
locationManager.requestAlwaysAuthorization()
break
case .restricted, .denied:
// Disable location features
disableMyLocationBasedFeatures()
break
case .authorizedAlways:
// Enable any of your app's location features
enableMyAlwaysFeatures()
break
}
}
}
注意: - 您需要在应用的Info.plist文件中包含NSLocationWhenInUseUsageDescription和NSLocationAlwaysAndWhenInUseUsageDescription键。 (如果您的应用支持iOS 10及更早版本,则还需要NSLocationAlwaysUsageDescription键。)如果这些键不存在,则授权请求会立即失败。
验证以下步骤:
1.set location manager的allowBackgroundLocationUpdates为YES
2.拨打 requestAlwaysAuthorization()方法
3.在info.plist中添加NSLocationAlwaysUsageDescription
4.将应用程序配置为在后台运行(plist中的UIBackgroundModes)可能在沙箱中。