iOS8.0之前,之后,iOS9.0之后在获取用户位置信息的区别

iOS 8.0 之前获取用户的位置信息

  • 默认情况下,只能在前台获取用户位置信息,如果在后台也想要获取用户的位置信息,需要开启后台模式。

iOS 8.0之后,iOS 9.0之前想要获取用户的位置信息

  • 需要主动请求授权
    • 前台定位授权,必须在info.plist文件中配置对应的key
      • NSLocationWhenInUseUsageDescription
    • 默认情况下只能在前台获取用户的位置信息,如果想要在后台也获取用户的位置信息,需要开启:后台模式,勾选,location updates
      • 在后台获取用户的位置信息,会在顶部显示蓝色横幅,实时提示用户该APP在获取你的位置信息,点击蓝色横幅则会打开该APP
    • 前后台定位授权,必须在info.plist文件中配置对应的key
      • NSLocationAlwaysUsageDescription
    • 在前台和后台都能够获取用户的位置信息,在后台获取用户的位置信息,不需要开启后台模式

iOS 9.0 之后获取用户的位置信息

  • 前台定位授权,和iOS 8.0之后的基本操作一样,想要在后台获取用户的位置信息,需要满足两个条件
    • 需要开启后台模式: location updates
    • 必须允许后台获取用户的位置信息
      • 注意点:如果允许后台获取用户的位置信息,必须勾选后台模式,否则会造成程序崩溃
  • 前后台定位授权,和iOS 8.0之后的操作一样
import UIKit
import CoreLocation

class ViewController: UIViewController {
    
    lazy var locationM : CLLocationManager = {
        let locationM = CLLocationManager()
        locationM.delegate = self
        if #available(iOS 8.0, *) { 
            
            //前台的定位授权请求申请
            locationM.requestWhenInUseAuthorization()
            if #available(iOS 9.0, *) {
                //允许在后台运行 
            locationM.allowsBackgroundLocationUpdates = true
                    
            }

            //前后台的定位授权申请
            // iOS8.0之后的前后台定位授权没有任何变化
            //locationM.requestAlwaysAuthorization()    
        }
        
        return locationM
    }()
    
    override func touchesBegan(_ touches: Set, with event: UIEvent?) {
        
        // 开始定位
        // 调用这个方法,就会不断地获取用户的位置信息
        locationM.startUpdatingLocation()
    }

}

extension ViewController : CLLocationManagerDelegate {
    /// 当获取到用户的位置的时候会来到该方法
    ///
    /// - Parameters:
    ///   - manager: 位置管理者
    ///   - locations: 位置数组
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        print("定位到了")
    }
}

你可能感兴趣的:(iOS8.0之前,之后,iOS9.0之后在获取用户位置信息的区别)