gpt4 book ai didi

iOS 13 仅在用户 "Allow Once"之后再次调用 requestAlwaysAuthorization

转载 作者:行者123 更新时间:2023-11-28 19:25:44 28 4
gpt4 key购买 nike

在 iOS13 上请求 Always 权限期间,用户可以点击“允许一次”,这将调用状态为 kCLAuthorizationStatusAuthorizedWhenInUse 的适当委托(delegate)。但请求“始终”再次调用委托(delegate) kCLAuthorizationStatusAuthorizedAlways . 为什么?当其他组合像您始终要求的那样只工作一次时,您会得到它,即使再次调用也不会调用具有状态的委托(delegate)。

要测试的示例代码:

@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。但这实际上并不重要。你总是临时。所以:

  • 当您随后进入后台并开始监控访问或区域或任何您的位置监控使用情况时,这将被转换为始终授权以供使用。 (您的日志记录应该证实这一点。)

  • 然后,因为你只有一次授权,当你回到前台时,你将再次不确定。

所以要点是,邪恶地笑一笑,然后继续前进。您的后台位置监控将起作用,这才是最重要的。它不仅有效,而且作为奖励,您可以再次向用户显示授权警报,这就是 iOS 13 中所有这些更改的原因。别担心,开心点。

关于iOS 13 仅在用户 "Allow Once"之后再次调用 requestAlwaysAuthorization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58453558/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com