![](/img/trans.png)
[英]How to request geolocation in CLLocationManager with `requestAlwaysAuthorization` in iOS 13?
[英]iOS 13 call requestAlwaysAuthorization again after user “Allow Once” only
在 iOS13 上請求 Always 權限期間,用戶可以點擊“允許一次”,這將調用狀態為kCLAuthorizationStatusAuthorizedWhenInUse
的適當委托,但再次請求“始終”以kCLAuthorizationStatusAuthorizedAlways
調用委托。 為什么? 當其他組合像您總是要求的那樣只工作一次時,您會得到它,即使再次調用也不會調用具有狀態的委托。
要測試的示例代碼:
@import CoreLocation;
@interface ViewController () <CLLocationManagerDelegate>
@property (strong, nonatomic) CLLocationManager *locationManager;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
}
- (IBAction)doauthloc:(id)sender {
[self.locationManager requestAlwaysAuthorization];
}
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
switch(status) {
case kCLAuthorizationStatusNotDetermined:NSLog(@"AUTH STATUS:kCLAuthorizationStatusNotDetermined"); break;
case kCLAuthorizationStatusRestricted:NSLog(@"AUTH STATUS:kCLAuthorizationStatusRestricted"); break;
case kCLAuthorizationStatusDenied:NSLog(@"AUTH STATUS:kCLAuthorizationStatusDenied"); break;
case kCLAuthorizationStatusAuthorizedAlways:NSLog(@"AUTH STATUS:kCLAuthorizationStatusAuthorizedAlways"); break;
case kCLAuthorizationStatusAuthorizedWhenInUse:NSLog(@"AUTH STATUS:kCLAuthorizationStatusAuthorizedWhenInUse"); break;
};
}
@end
這有點令人困惑,不是嗎? 當您要求 Always 並且用戶點擊 Allow Once 時,您會被告知您獲得了 WhenInUse。 但這實際上並不重要。 你有臨時的總是。 所以:
當您隨后 go 進入后台並開始監控訪問或區域或您的位置監控使用情況時,這將轉換為始終授權以用於使用目的。 (您的日志記錄應確認這一點。)
然后,因為你只獲得了一次授權,當你回到前台時,你將再次未確定。
所以要點是,笑一個邪惡的笑,然后繼續前進。 您的后台位置監控將起作用,這才是最重要的。 它不僅有效,而且作為獎勵,您可以再次向用戶顯示授權警報,這就是 iOS 13 中所有這些更改的原因。別擔心,要開心。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.