上报系统对比,定位跟权限

Posted 刘姥姥爱学习

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了上报系统对比,定位跟权限相关的知识,希望对你有一定的参考价值。

上报系统

  • 埋点上报

●具体业务代码处、手动添加埋点代码
●友盟统计/百度统计
●无法更改/代码侵入
●预埋使用轮询接口上传日志
●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

以上是关于上报系统对比,定位跟权限的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段

软件项目管理作业一 —— 描述项目

liteos错误处理

NR - iOS / Android 相机/相册/日历/定位 等权限 检测+申请代码

NR - iOS / Android 相机/相册/日历/定位 等权限 检测+申请代码

NR - iOS / Android 相机/相册/日历/定位 等权限 检测+申请代码