上報系統
- 埋點上報
●具體業務代碼處、手動添加埋點代碼
●友盟統計/百度統計
●無法更改/代碼侵入
●預埋使用輪詢介面上傳日志
●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
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/297618.html
標籤:其他
下一篇:java 反射機制簡單理解
