https://www.jianshu.com/p/4541cd070423
### 一、前言
大數據時代,用戶對自己的隱私安全越來越關注,所以,隨着iOS系統更新,蘋果對用戶隱私相關(定位、相冊、網絡、粘貼板等)權限控制持續升級。其中定位權限相關申請API與配置項較多,本文旨在記錄說明 iOS8.0 - 14.0beta 從權限申請到獲取定位數據流程。
內容包括定位權限、獲取定位數據、定位權限API調用實踐。定位權限模塊按照系統相關性分別介紹該系統下權限配置與API調用細節、注意事項與表格總結;獲取定位數據模塊介紹定位關鍵參數、單次/連續定位等;調用實踐模塊介紹了從 iOS8.0 - 14.0beta 系統定位權限的適配實踐。
### 二、定位權限
#### 1、iOS8.*
-前台定位
-需要在info.plist配置NSLocationWhenInUseUsageDescription字段;
-首次使用定位時,通過API接口requestWhenInUseAuthorization申請應用使用時權限;
注意:此權限下,如果Xcode勾選 Capabilities -> UIBackgroundModes > Location updates,則app退到后台仍可獲取定位數據,但此時在手機上方會有定位小藍條提示;
-后台定位
-需要在info.plist配置NSLocationAlwaysUsageDescription字段;
-需要Xcode勾選 Capabilities -> UIBackgroundModes > Location updates;
-首次使用定位時,通過API接口requestAlwaysAuthorization申請應用未使用時權限;
#### 2、iOS9.*與iOS10.*
-**前台定位**
-需要在info.plist配置NSLocationWhenInUseUsageDescription字段;
-首次使用定位時,通過API接口requestWhenInUseAuthorization申請應用使用時權限,如下圖;

注意:此權限下,如果Xcode勾選 Capabilities -> UIBackgroundModes > Location updates並且allowsBackgroundLocationUpdates設為YES,則app退到后台仍可獲取定位數據,但此時在手機上方會有定位小藍條提示;
-**后台定位**
-需要在info.plist配置NSLocationAlwaysUsageDescription字段;
-需要Xcode勾選 Capabilities -> UIBackgroundModes > Location updates;
-需要CLLocationManager設置allowsBackgroundLocationUpdates為YES;
-首次使用定位時,通過API接口requestAlwaysAuthorization申請應用未使用時權限,如下圖;

-**與iOS8.*版本相比不同點**
-iOS9.*后台增加了allowsBackgroundLocationUpdates屬性,可以認為在iOS8.*下allowsBackgroundLocationUpdates永遠為YES;
#### 3、iOS11.*與iOS12.*
-**前台定位**
-需要在info.plist配置NSLocationWhenInUseUsageDescription字段;
-首次使用定位時,通過API接口requestWhenInUseAuthorization申請應用使用時權限,如下圖;

注意:此權限下,如果Xcode勾選 Capabilities -> UIBackgroundModes > Location updates並且allowsBackgroundLocationUpdates設為YES,則app退到后台仍可獲取定位數據,但此時在手機上方會有定位小藍條提示,此小藍條不可隱藏;
-**后台定位**
-需要在info.plist配置NSLocationWhenInUseUsageDescription、NSLocationAlwaysAndWhenInUseUsageDescription字段;
-需要Xcode勾選 Capabilities -> UIBackgroundModes > Location updates;
-需要CLLocationManager設置allowsBackgroundLocationUpdates為YES;
-首次使用定位時,通過API接口requestAlwaysAuthorization申請應用未使用時權限,如下圖;

注意:此權限下,當app在后台時,系統默認不展示定位小藍條,可通過showsBackgroundLocationIndicator控制小藍條是否顯示;
-**與iOS10.*版本相比不同點**
-iOS11.*變更了后台定位權限配置字段;
-iOS11.*以后如果申請后台定位,info.plist需要同時配置
作者:謝見章
鏈接:https://www.jianshu.com/p/4541cd070423
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。