175平台官网-navigator useragent

苹果ios14采用率已达25
2023年4月4日发(作者:网页字体怎么变大)

iOS定位权限与使⽤阐述(含iOS14定位适配)

###⼀、前⾔

⼤数据时代,⽤户对⾃⼰的隐私安全越来越关注,所以,随着iOS系统更新,苹果对⽤户隐私相关(定位、相册、⽹络、粘贴板等)权限控制持续

升级。其中定位权限相关申请API与配置项较多,本⽂旨在记录说明iOS8.0-14.0beta从权限申请到获取定位数据流程。

内容包括定位权限、获取定位数据、定位权限API调⽤实践。定位权限模块按照系统相关性分别介绍该系统下权限配置与API调⽤细节、注意事

项与表格总结;获取定位数据模块介绍定位关键参数、单次/连续定位等;调⽤实践模块介绍了从iOS8.0-14.0beta系统定位权限的适配实践。

###⼆、定位权限

1、iOS8.*

-前台定位

-需要在配置NSLocationWhenInUseUsageDescription字段;

-⾸次使⽤定位时,通过API接⼝requestWhenInUseAuthorization申请应⽤使⽤时权限;

注意:此权限下,如果Xcode勾选Capabilities->UIBackgroundModes>Locationupdates,则app退到后台仍可获取定位数据,但此时在

⼿机上⽅会有定位⼩蓝条提⽰;

-后台定位

-需要在配置NSLocationAlwaysUsageDescription字段;

-需要Xcode勾选Capabilities->UIBackgroundModes>Locationupdates;

-⾸次使⽤定位时,通过API接⼝requestAlwaysAuthorization申请应⽤未使⽤时权限;

2、iOS9.*与iOS10.*

-**前台定位前台定位**

-需要在配置NSLocationWhenInUseUsageDescription字段;

-⾸次使⽤定位时,通过API接⼝requestWhenInUseAuthorization申请应⽤使⽤时权限,如下图;

注意:此权限下,如果Xcode勾选Capabilities->UIBackgroundModes>Locationupdates并且

allowsBackgroundLocationUpdates设为YES,则app退到后台仍可获取定位数据,但此时在⼿机上⽅会有定位⼩蓝条提⽰;

-**后台定位后台定位**

-需要在配置NSLocationAlwaysUsageDescription字段;

-需要Xcode勾选Capabilities->UIBackgroundModes>Locationupdates;

-需要CLLocationManager设置allowsBackgroundLocationUpdates为YES;

-⾸次使⽤定位时,通过API接⼝requestAlwaysAuthorization申请应⽤未使⽤时权限,如下图;

-**与iOS8.*版本相⽐不同点**

-iOS9.*后台增加了allowsBackgroundLocationUpdates属性,可以认为在iOS8.*下allowsBackgroundLocationUpdates永远为YES;

3、iOS11.*与iOS12.*

-**前台定位前台定位**

-需要在配置NSLocationWhenInUseUsageDescription字段;

-⾸次使⽤定位时,通过API接⼝requestWhenInUseAuthorization申请应⽤使⽤时权限,如下图;

注意:此权限下,如果Xcode勾选Capabilities->UIBackgroundModes>Locationupdates并且allowsBackgroundLocationUpdates设

为YES,则app退到后台仍可获取定位数据,但此时在⼿机上⽅会有定位⼩蓝条提⽰,此⼩蓝条不可隐藏;

-**后台定位后台定位**

-需要在配置NSLocationWhenInUseUsageDescription、NSLocationAlwaysAndWhenInUseUsageDescription字段;

-需要Xcode勾选Capabilities->UIBackgroundModes>Locationupdates;

-需要CLLocationManager设置allowsBackgroundLocationUpdates为YES;

-⾸次使⽤定位时,通过API接⼝requestAlwaysAuthorization申请应⽤未使⽤时权限,如下图;

注意:此权限下,当app在后台时,系统默认不展⽰定位⼩蓝条,可通过showsBackgroundLocationIndicator控制⼩蓝条是否显⽰;

-**与iOS10.*版本相⽐不同点**

-iOS11.*变更了后台定位权限配置字段;

-iOS11.*以后如果申请后台定位,需要同时配置NSLocationWhenInUseUsageDescription、

NSLocationAlwaysAndWhenInUseUsageDescription两个字段;

-iOS11.*增加了showsBackgroundLocationIndicator属性,当拥有后台定位权限时,⽤于控制定位⼩蓝条是否显⽰。可以认为在iOS10.*之

前showsBackgroundLocationIndicator永远为NO;

4、iOS13.*

-**前台定位前台定位**

-需要在配置NSLocationWhenInUseUsageDescription字段;

-⾸次使⽤定位时,通过API接⼝requestWhenInUseAuthorization申请应⽤使⽤时权限;

注意:权限申请弹窗与之前版本不⼀致,新增了允许⼀次选项;如果⽤户选择允许⼀次后,下次在使⽤app时,仍可重新调⽤API申请定位权限;

如下图

-**后台定位后台定位**

-需要在配置NSLocationWhenInUseUsageDescription、NSLocationAlwaysAndWhenInUseUsageDescription字段;

-需要Xcode勾选Capabilities->UIBackgroundModes>Locationupdates;

-需要CLLocationManager设置allowsBackgroundLocationUpdates为YES;

-⾸次使⽤定位时,通过API接⼝requestAlwaysAuthorization申请权限;

注意:1)直接调⽤requestAlwaysAuthorization申请权限时,权限弹窗与调⽤requestWhenInUseAuthorization⼀样,如上图,⽤户只

可以选择应⽤使⽤时或者只允许⼀次。不同点:当选择使⽤app时允许选项后,状态变更的回调为

kCLAuthorizationStatusAuthorizedAlways;并且当app退到后台后,系统会择机弹窗提⽰⽤户是否要升级权限为始终允许。如下图:

2)如果想要在应⽤使⽤期间弹窗申请始终允许,则需要先调⽤requestWhenInUseAuthorization,并且获得应⽤使⽤期间定位权限,之后

在调⽤requestAlwaysAuthorization则可弹窗申请始终允许,如下图;(感觉不是太友好,不建议使⽤)

-**与iOS12.*版本相⽐不同点**

-使⽤应⽤期间的定位权限增加了允许⼀次选项;

-不能直接申请后台定位权限,需要⽤户先选择应⽤使⽤期间的定位权限后,在进⾏权限升级;

5、iOS14.*(beta版本)

-**前台定位前台定位**

-需要在配置NSLocationWhenInUseUsageDescription字段;

-⾸次使⽤定位时,通过API接⼝requestWhenInUseAuthorization申请应⽤使⽤时权限;

注意:权限申请弹窗与之前版本不⼀致,新增了精确位置开关,新增了⼩地图展⽰当前位置;⼩地图的显⽰,⽀持在⼿机定位设置中选择,如果选

择关闭不显⽰则⼿机中所有app都不显⽰此⼩地图。如下图

-**后台定位后台定位**

-需要在配置NSLocationWhenInUseUsageDescription、NSLocationAlwaysAndWhenInUseUsageDescription字段;

-需要Xcode勾选Capabilities->UIBackgroundModes>Locationupdates;

-需要CLLocationManager设置allowsBackgroundLocationUpdates为YES;

-⾸次使⽤定位时,通过API接⼝requestAlwaysAuthorization申请权限;

-**新增精度权限新增精度权限**

-需要在配置NSLocationTemporaryUsageDescriptionDictionary,如下:

```objectivec

NSLocationTemporaryUsageDescriptionDictionary

ExampleUsageDescription

Thisappneedsaccuratelocationsoitcanverifythatyouareinasupportedregion.

AnotherUsageDescription

Thisappneedsaccuratelocationsoitcanshowyourelevantresults.

```

-新增属性字段@property(nonatomic,readonly)CLAccuracyAuthorizationaccuracyAuthorizationAPI_AVAILABLE(ios(14.0),

macos(11.0),watchos(7.0),tvos(14.0));可以获取当前的定位精度权限。

-在app已经获得定位权限之后,并且当前⽤户选择的是模糊定位,则允许应⽤申请⼀次临时精确定位权限,申请api为-

(void)requestTemporaryFullAccuracyAuthorizationWithPurposeKey:(NSString*)purposeKeycompletion:(void(^)(NSError

*))completion;其中purposeKey既为plist中配置字典中的key,可以有多个,对应app中不同的定位需求场景;**注意:**此API不能⽤于申请定

位权限,只能⽤于从模糊定位升级为精确定位;申请定位权限只能调⽤requestWhen或requestAlways,如果没有获得定位权限,直接调⽤此

API⽆效。如下图

-如果app默认不使⽤精确定位,则可以在中配置NSLocationDefaultAccuracyReduced字段,配置该字段后,申请定位权限的⼩地

图中不在有精确定位的开关,即为关。如下⾯图⽰

-需要注意该字段类型为Boolean,如果为其他类型则不起效;

-配置该字段后,申请定位权限的⼩地图左上⾓则没有精确开关,默认关闭,如下⾯图⽰。但是如果中配置了

NSLocationTemporaryUsageDescriptionDictionary,则仍可以申请临时的精确定位权限;

-⚠

更多推荐

苹果ios14采用率已达25