iOS LBS地圖服務:高德地圖定位說明,lbs高德
iOS 11出現了四種定位隱私權設定 iOS 11不能定位問題 iOS 11定位隱私選擇提示框說明定位原因否則被拒 選擇使用應用期間定位螢幕頂部討厭的藍色閃爍提示框 如何不出現藍色定位閃爍提示框 高德地圖後台持續定位關鍵代碼
iOS 11出現了四種定位隱私權設定
Privacy - Location Always and When In Use Usage DescriptionPrivacy - Location Always Usage DescriptionPrivacy - Location When In Use Usage DescriptionPrivacy - Location Usage Description
iOS 11不能定位問題
//必須選上,不選上的話,其他三種定位隱私即使設定了也不會出現定位效果Privacy - Location Always and When In Use Usage Description
log日誌會出現如下錯誤提示
This app has attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain both NSLocationAlwaysAndWhenInUseUsageDescription and NSLocationWhenInUseUsageDescription keys with string values explaining to the user how the app uses this data
iOS 11定位隱私選擇提示框說明定位原因,否則被拒
填寫定位說明原因的位置
效果
選擇使用應用期間定位–螢幕頂部討厭的藍色閃爍提示框
開啟的後台持續定位,這個藍色的閃爍提示框是iOS系統內部增加的,誰也沒辦法去掉,除非沒有做後台持續定位,在選擇使用應用期間,APP進入後台就會出現這個藍色閃爍提示框
如何不出現藍色定位閃爍提示框
1.引導使用者選擇始終允許定位(始終允許或者不允許的情況下,後台持續定位不會出現藍色閃爍提示框)
2.使用蘋果內建的CLLocationManager,修改定位優先順序許可權
//使用期間定位- (void)requestWhenInUseAuthorization API_AVAILABLE(ios(8.0)) API_UNAVAILABLE(macos);//始終允許定位- (void)requestAlwaysAuthorization API_AVAILABLE(ios(8.0)) API_UNAVAILABLE(macos) __TVOS_PROHIBITED;
去設定預設定位優先順序為始終允許定位
3.不做後台持續定位功能!!!!!
高德地圖後台持續定位關鍵代碼
#import #import #import @interface AppDelegate ()//定位元據管理@property (nonatomic, strong) AMapLocationManager *locationManager;/** * 後台定位是否返回逆地理資訊,預設NO。 */@property (nonatomic, assign) BOOL locatingWithReGeocode;@end
#pragma mark - 後台定位和持續定位。- (void)initLocation{ self.locationManager = [[AMapLocationManager alloc] init]; self.locationManager.delegate = self;//遵守代理,實現協議 //設定定位最小更新距離方法如下,單位米。當兩次定位距離滿足設定的最小更新距離時,SDK會返回符合要求的定位結果。 self.locationManager.distanceFilter = 100; //開啟持續定位 //iOS 9(不包含iOS 9) 之前設定允許後台定位參數,保持不會被系統掛起 [self.locationManager setPausesLocationUpdatesAutomatically:NO]; //iOS 9(包含iOS 9)之後新特性:將允許出現這種情境,同一app中多個locationmanager:一些只能在前台定位,另一些可在後台定位,並可隨時禁止其後台定位。 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9) { self.locationManager.allowsBackgroundLocationUpdates = YES; } // 如果需要持續定位返回逆地理編碼資訊 [self.locationManager setLocatingWithReGeocode:YES]; //開始持續定位 [self.locationManager startUpdatingLocation];}#pragma mark - 在回呼函數中,擷取定位座標,進行業務處理--傳遞給後台。- (void)amapLocationManager:(AMapLocationManager *)manager didUpdateLocation:(CLLocation *)location reGeocode:(AMapLocationReGeocode *)reGeocode{ NSLog(@"location:{緯度lat:%f; 經度lon:%f; accuracy:%f}", location.coordinate.latitude, location.coordinate.longitude, location.horizontalAccuracy); if (reGeocode){// NSLog(@"reGeocode:%@", reGeocode); [self activityCodeWithLocation:location]; }}#pragma mark - 上傳經緯度到後台,記錄活動軌跡- (void)activityCodeWithLocation:(CLLocation *)location{ NSString *URLString = @"api/xxxxx"; NSDictionary *parameters = @{ @"xPosition":[NSString stringWithFormat:@"%f",location.coordinate.longitude], @"yPosition":[NSString stringWithFormat:@"%f",location.coordinate.latitude] }; [NetworkTool requestWithType:requestTypePOST URLString:URLString parametersAuthority:parameters success:^(id _Nullable responseObject) { ZYLog(@"%@",responseObject); } failure:^(NSError * _Nonnull error) { ZYLog(@"%@",error); }];}