簡體   English   中英

iOS 13 僅在用戶“允許一次”后再次調用 requestAlwaysAuthorization

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM