当前位置:首页 » 《关注互联网》 » 正文

上报系统对比,定位跟权限_刘姥姥爱学习的博客

27 人参与  2021年09月05日 12:23  分类 : 《关注互联网》  评论

点击全文阅读


上报系统

  • 埋点上报

●具体业务代码处、手动添加埋点代码
●友盟统计/百度统计
●无法更改/代码侵入
●预埋使用轮询接口上传日志
●Crash. 上报

  • 无埋点上报

●基于基于Runtime/消息转发
●使用Method Swizzling / Aspect/开源框架
●hook通用方法(页面时常、 接口调用、点击)
●动态下发/动态增加删除上报
●唯一标识的问题

ios中的定位服务

●CoreL ocation.framework
●获取设备的地理位置、方向、海拔等信息
●系统通过多种方式获得(WI-FI/ GPS/蓝牙…)
●定位服务的使用
●首次使用需要获取权限
●通过CLLocationManager获得当前的位置

定位权限

两个维度

  • 隐私定位服务

CLLocationManager locationServicesEnabled
引导跳转Setting

  • 具体app的定位服务

CLLocationManager authorizationStatus
设置info.plist申请权限的具体原因
发起询问
在delegate中处理授权变化

代码演示

定义一个类出来专门弄这个

@interface GTLocation : NSObject

+ (GTLocation *)locationManager;

- (void)checkLocationAuthorization;

@end
#import "GTLocation.h"
#import <CoreLocation/CoreLocation.h>

@interface GTLocation()<CLLocationManagerDelegate>
//这个右面有用
@property(nonatomic, strong, readwrite) CLLocationManager *manager;
@end

@implementation GTLocation
//单例模式
+ (GTLocation *)locationManager{
    static GTLocation *location;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        location = [[GTLocation alloc] init];
    });
    return location;
}
//初始化上面的参数 设置delegate
- (instancetype)init{
    self = [super init];
    if (self) {
        self.manager = [[CLLocationManager alloc] init];
        self.manager.delegate = self;
    }
    return self;
}

- (void)checkLocationAuthorization{
    
    //判断系统是否开启
    if(![CLLocationManager locationServicesEnabled]){
        //引导弹窗
        //
    }
    
    if([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined){//如果开启了就判断是不是第一次用
        [self.manager requestWhenInUseAuthorization];//获取用户使用时候的权限
    }
}

#pragma mark - delegate

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{
    //如果早试用期间改变就在更新一次
    if (status == kCLAuthorizationStatusAuthorizedWhenInUse) {
        //
        [self.manager startUpdatingLocation];
        
    }else if (status == kCLAuthorizationStatusDenied){
        //
    }
}

- (void)locationManager:(CLLocationManager *)manager
     didUpdateLocations:(NSArray<CLLocation *> *)locations {
    
    //地理信息
    CLLocation *location = [locations firstObject];
    //用于在地理坐标和地名之间转换的接口。
    CLGeocoder *coder = [[CLGeocoder alloc] init];
    //提交指定位置的反向地理编码请求。
    [coder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        //地标信息
    }];
    
     [self.manager stopUpdatingLocation];
}

@end

在appdelegate中

   [[GTLocation locationManager] checkLocationAuthorization];

在info.plist加入
在这里插入图片描述

CLLocationManager

●CLLocationManager

●提供位置相关的操作 ●权限 ●开始或停 止位置相关的服务

●CLLocation

●某个位置的地理信息(经度/维度/海拔…

CL Placemar.k

●地标信息(省市街道…)

●CLLocationManagerDelegate

●位置相关权限更新回调 ●定位成功/失败回调 ●方向/指定区域的进入离开

●CLGeocoder.

●提供CLLocation 和CLPlacemark之间的转换

●模拟器支持坐标信息

定位服务的流程

locationServiceEnabled 服务开关
authorizationStatus 权限申请
didChangeAuthorizationStatus 权限更新
startUpdatingLocation 位置信息获取
didUpdateLocation 位置信息
reverseGeocodeLocation 地标信息

其他的服务

位置的变化,运动的轨迹,速度
后台定位服务
mapkit


点击全文阅读


本文链接:http://zhangshiyu.com/post/27027.html

位置  权限  定位  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1