仅用户“允许一次”后,iOS 13再次调用requestAlwaysAuthorization

时间:2019-10-18 15:06:14

标签: ios core-location ios13 ios-permissions

在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 个答案:

答案 0 :(得分:3)

有点混乱,不是吗?当您询问“始终”并且用户点按“一次允许”时,系统会告知您获得了WhenInUse。但这实际上并不重要。您总是有 provisional 。所以:

  • 随后您进入后台并开始监视访问或区域或任何位置监视用途时,出于使用目的,这将转换为“始终授权”。 (您的日志记录应该确认这一点。)

  • 然后,由于您只有一次授权,因此当您回到前台时,将不会再被确定。

因此,主要的是,笑到邪恶的笑声然后继续前进。您的后台位置监视将起作用,这很重要。它不仅有效,而且还可以向用户再次显示授权警报 ,这是iOS 13中所有这些更改的原因,不用担心,请开心。 / p>