Запрос вызова iOS 13 всегда повторяется после авторизации только для пользователя «Разрешить один раз» - PullRequest
0 голосов
/ 18 октября 2019

Во время запроса разрешения «Всегда» в iOS13 пользователь может нажать «Разрешить один раз», что вызовет соответствующего делегата со статусом 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

1 Ответ

3 голосов
/ 18 октября 2019

Это немного сбивает с толку, не так ли? Когда вы спрашиваете «Всегда» и пользователь нажимает «Разрешить один раз», вам сообщают, что вы получили «Когда есть». Но это на самом деле не имеет значения. У вас есть предварительный Всегда. Итак:

  • Когда вы впоследствии перейдете в фоновый режим и начнете отслеживать посещения или регионы, или как вы используете мониторинг местоположения, это будет преобразовано в Всегда авторизацию для целей использования. (Ваша регистрация должна подтвердить это.)

  • И затем, поскольку у вас есть только однажды авторизация, когда вы вернетесь на передний план, вы снова не определитесь.

Итак, вы можете просто смеяться над злым смехом и двигаться дальше. Ваш фоновый мониторинг местоположения будет работать, и это все, что имеет значение. Это не только работает, но и в качестве бонуса вы даете пользователю уведомление об авторизации снова , что является причиной всех этих изменений в iOS 13. Не беспокойтесь, будьте счастливы.

...