iOS - 如何将allowsBackgroundLocationUpdates设置为YES?

时间:2018-02-18 17:39:06

标签: ios swift core-location cllocationmanager background-process

也许这是一个愚蠢的问题,但我真的无法在任何地方找到答案。我想让我的iOS应用程序在后台运行时向Web服务器发送位置更新。目前它不起作用,我知道原因是因为allowBackgroundLocationUpdates默认设置为NO。 我的问题是在哪里可以/应该将allowsBackgroundLocationUpdates设置为YES?

编辑:让我补充一点,我已经修改了我的Info.plist以包括:所需的背景模式 - 用于位置更新的应用寄存器

1 个答案:

答案 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)可能在沙箱中。