iOS 模糊定位适配

定位的权限和定位精确度权限对该单一应用所有的LocationManager实例都适用,即只要有一个实例获得了权限,其他实例都获得。


被动监听权限变化的方法

  1. 权限的变更会通过TencentLBSLocationManagerDelegate中的 - (void)tencentLBSDidChangeAuthorization:(TencentLBSLocationManager *)manager方法回调

  2. 然后通过manager的authorizationStatus属性和accuracyAuthorization来确定当前应用的定位权限和精度权限

    CLAuthorizationStatus authorizationstatus = manager.authorizationStatus;
    TencentLBSAccuracyAuthorization accAuthor = manager.accuracyAuthorization;
    

主动检查精确度权限方法

可以使用以下方法判断当前应用的定位精度权限,业务可根据相应的值做出不同的操作:

TencentLBSAccuracyAuthorization accAuthor = [TencentLBSLocationManager accuracyAuthorization];

申请暂时精确定位权限

  1. 在TencentLBSLocationManager类中新增两个申请暂时的精确定位权限接口,

    /*
     当前属于模糊定位状态时,通过该接口请求暂时的完全定位精度的权限

     @param purposeKey 需要在info.plist中配置    NSLocationTemporaryUsageDescriptionDictionary key值和对应的申请该权限的描述理由
     @param completion
     在弹框让用户选择后的用户的反馈,如果用户授予该权限,block中的参数为nil,如果未授予,block中的参数将为PurposeKey对于的key的描述(如PurposeKey=TemporaryPurposKey_1)
     */
    - (void)requestTemporaryFullAccuracyAuthorizationWithPurposeKey:(NSString *)purposeKey completion:(void (^)(NSError *))completion;
    
    /*
     当前属于模糊定位状态时,通过该接口请求暂时的完全定位精度的权限

     @param purposeKey 需要在info.plist中配置:NSLocationTemporaryUsageDescriptionDictionary的key值和对应的申请该权限的描述理由
     */
    - (void)requestTemporaryFullAccuracyAuthorizationWithPurposeKey:(NSString *)purposeKey;
    
  2. 注意:

    1. 申请的精准定位权限,用户选择同意之后,这个权限持续的时间为app存活的时间,在app被挂起或者进程被杀死后,都需要重新申请
    2. 若用户未同意精准定位权限,仍然保持模糊定位权限时,系统的定位精度和回调频率受到限制,蓝牙扫描回调也将停止,频率大概1小时4次的回调,精度会比基站定位的精度大。

配置默认模糊定位权限

如果应用默认不使用精确定位,则可在info.plist中配置NSLocationDefaultAccuracyReduced字段为Boolean类型的true,在应用运行过程中仍然可以申请暂时的精确定位权限配置该字段后,申请定位权限的小地图左上角则没有精确开关,默认关闭,但是如果info.plist中配置了NSLocationTemporaryUsageDescriptionDictionary,则仍可以申请临时的精确定位权限;

本页内容