175平台官网-navigator useragent
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
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
发布评论