iOS8位置:在用户授权后,如何请求始终授权"何时使用"授权?

时间:2014-08-07 17:50:31

标签: core-location ios8

当我的应用程序启动地图视图时,我会请求iOS8"何时使用"位置许可。假设用户授予该权限。

我想仅在用户选择我的地理围栏功能时才请求“始终”权限。但是调用CLLocationManager.requestAlwaysAuthorization没有任何效果,因为当前的授权状态不再是kCLAuthorizationStatusNotDetermined。

在用户授予“使用时”权限后,如何申请“永久”权限?我认为这是一个常见的用例,因为除非需要,应用程序应避免要求“始终”权限。

2 个答案:

答案 0 :(得分:3)

你是对的,如果用户已经授予“使用时”权限,则调用requestAlwaysAuthorization将不会执行任何操作。我使用的解决方法是将用户链接到设置屏幕,让他们自己打开“始终”设置。以下是执行此操作的步骤:

  1. 在名为app-Info.plist的{​​{1}}中创建一个新密钥,并输入一些原因,说明您需要在值字段中请求始终权限的原因。

    info.plist file

  2. 将您的用户关联到应用的设置屏幕(more info here

    NSLocationAlwaysUsageDescription
  3. 一旦用户点击您的链接,他们就会看到:

    Initial settings screen

    当他们点击NSURL *settings = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; if ([[UIApplication sharedApplication] canOpenURL:settings]) [[UIApplication sharedApplication] openURL:settings]; 时,他们将能够看到LocationWhile Using the App设置以供选择:

    Location access settings screen

  4. 通过实施CLLocationManager委托方法Always
  5. 来监控应用中的授权更改

答案 1 :(得分:2)

我不了解objective-c,但它在swift和iOS 8.4中对我来说很好。确保在info.plist中提供这两个键

NSLocationAlwaysUsageDescription
NSLocationWhenInUseUsageDescription
// iOS 11 and up will require this key instead of AlwaysUsageDescription
NSLocationAlwaysAndWhenInUsageDescription

然后致电

locationManager.requestAlwaysAuthorization() 

确保locationManager是一个实例变量!由于某些奇怪的原因,将忽略局部变量。 Apple Documentation

相关问题