全部服务产品
开发者频道
定价
登录
iOS 14 Beta适配说明
下载开发文档
一、用户可以控制授予APP的定位精度等级

iOS 14系统,为了进一步控制定位隐私数据的安全性,也针对各APP实际上对于定位精度的需求不一致的问题(如天气、新闻类APP实际上只需要城市级别定位精度即可),定位权限在用户授予时增加了『精确位置』的开关,如下图所示:

iOS13-beta.png

用户可以点击上图红色区域,以控制是否授予APP高精度等级定位权限。在授予低精度等级定位权限的情况下,开发者仍然可以从定位sdk的位置回调中获取到位置数据,但定位精度会受很大影响,一般定位精度在5km范围内,更新频率也会变慢,几分钟内会更新几次。

用户也可以直接从APP定位隐私设置中控制『精确位置』开关,如下图所示:

iOS13-beta2.png
二、定位SDK新增适配API说明

1、新增属性:

///返回定位精度等级,IOS14之后用户可以直接控制返回定位的精度等级,开发者可以通过这个值适配不同定位等级下的产品逻辑
@property (nonatomic, readonly) BMKLAccuracyAuthorization accuracyAuthorization;

开发者通过这一属性直接判断当前用户是否授予精确定位权限。枚举值如下:

/** BMKLAccuracyAuthorization 枚举返回定位精度等级
*
*/
typedef NS_ENUM(NSInteger, BMKLAccuracyAuthorization) {
BMKLAccuracyAuthorizationFullAccuracy, ///<全量定位精度等级,该等级下定位返回结果会尽可能精准
BMKLAccuracyAuthorizationReducedAccuracy, ///<降级定位精度等级,该等级下定位会返回大概5km精度范围的点,定位频率、实时性上也会变慢,比如可能是20分钟之前的点,适用于那些只要求城市级别精度的app使用;ios14之后,该等级受用户控制,需要高等级权限的app需要对应做好适配工作
};

2、新增方法:

/**
* @brief 如果你没有全量定位等级精度权限,利用该接口可以临时请求一次全量定位精度等级,系统会抛出弹框让用户确认是否授权app授予相应权限
* @param purposeKey info.plist中NSLocationTemporaryUsageDescriptionDictionary定义的key,对应相应的value可以详细描述申请全量定位精度等级的原因
* @param completion 回调是否
* @return
*/
- (void)requestTemporaryFullAccuracyAuthorizationWithPurposeKey:(NSString * _Nonnull)purposeKey completion:(void(^ _Nullable)(NSError * _Nullable))completion API_AVAILABLE(ios(14.0));
/**
* @brief 请求一次全量定位精度等级
* @param purposeKey info.plist中NSLocationTemporaryUsageDescriptionDictionary定义的key
* @return
*/
- (void)requestTemporaryFullAccuracyAuthorizationWithPurposeKey:(NSString * _Nonnull)purposeKey API_AVAILABLE(ios(14.0));

上述方法只在iOS 14及以后版本系统才可用。适用于在用户未授予精确定位权限的情况下,产品功能必须依赖精确定位的位置,开发者可以通过调用该方法临时触发系统弹框,让用户确认,其中参数:purposeKey,需要在info.plist中的NSLocationTemporaryUsageDescriptionDictionary中定义,不同产品场景可以定义不同的purposeKey。

iOS14-beta3.png

3、新增回调

在BMKLocationMnagerDelegate中新增加回调:

/**
* @brief authorizationStatus或者accuracyAuthorization有变化时回调函数
* @param manager 定位 BMKLocationManager 类。
*/
- (void)BMKLocationManagerDidChangeAuthorization:(BMKLocationManager * _Nonnull)manager;

通过该回调,在用户定位权限或者精确定位权限改变的时候,通知开发者,示例代码如下:

/**
* @brief authorizationStatus或者accuracyAuthorization有变化时回调函数
* @param manager 定位 BMKLocationManager 类。
*/
- (void)BMKLocationManagerDidChangeAuthorization:(BMKLocationManager * _Nonnull)manager {
NSLog(@"Loc CLAuthorizationStatus = %ld", (long)manager.authorizationStatus);
NSLog(@"Loc accuracyAuthorization = %ld", (long)manager.accuracyAuthorization);
if (manager.accuracyAuthorization == BMKLAccuracyAuthorizationReducedAccuracy) {
if (@available(iOS 14.0, *)) {
[manager requestTemporaryFullAccuracyAuthorizationWithPurposeKey:@"TempRequestFullLocAccuracy" completion:^(NSError * _Nullable error) {
if (error) {
NSLog(@"requestTemporaryFullAccuracyAuthorizationWithPurposeKey error = %@", error);
}
}];
}
} else {
NSLog(@"User has choose full loc accuracy permission");
}
if (manager.accuracyAuthorization == kCLAuthorizationStatusAuthorizedWhenInUse) {
NSLog(@"User has choose when in use loc permission");
} else if (manager.accuracyAuthorization == kCLAuthorizationStatusAuthorizedAlways) {
NSLog(@"User has choose always loc permission");
} else if (manager.accuracyAuthorization == kCLAuthorizationStatusDenied) {
NSLog(@"User has choose denied loc permission");
}
}
三、默认选择低精度定位模式

开发者在开发时,也可以配置app申请定位权限默认就是低精度的定位等级,有两种方式:

1、通过info.plist配置

iOS14-beta4.png

2、通过代码控制:

if (@available(iOS 14.0, *)) {
_locationManager.desiredAccuracy = kCLLocationAccuracyReduced;
} else {
// Fallback on earlier versions
}

适配iOS 14 Beta版的定位SDK开发包、类参考和示例代码可在相关下载页面进行下载。

上一篇

防作弊功能

下一篇

提交AppStore注意事项

本篇文章对您是否有帮助?