iOS 13 如何检查用户是否只被授予 Always allow location permission

iOS 13 How to check user is given only Always allow location permission

在我的应用程序中,我想检查用户是否被授予位置权限 "Always allow"。因为我正在做类似 WhatsApp 位置实时共享的位置共享。

实际上测试用例是,当我们在应用程序设置中将位置权限状态更改为 "while using the app" 并检查应用程序内按钮单击的状态时,我得到 "authorised Always" 值。

  func isAlwaysPermissionGranted() -> Bool{
    let aStatus = CLLocationManager.authorizationStatus()
    if aStatus == .authorizedAlways {
        return true
    }
     return false
  }

如果我们有"while using the app"权限,我无法区分"While Using the app"和"Always"。两者都具有相同的枚举值 "authorizedAlways"。

但在 WhatsApp 中,如果我将位置权限更改为 "While Using the App" 并尝试分享我的实时位置,WhatsApp 会显示一个警告,要求在应用程序设置中更改位置权限。

我也想这样做。

请帮助我改变代码级别。

你可以在 didChangeAuthorization 委托方法中检查它,就像这样。

switch CLLocationManager.authorizationStatus() {
        case .notDetermined:
            //Ask for permission
            break
        case .restricted:
            // user retricted to use location service.(Ex: parental control)
            break
        case .denied:
            //user denied location service
            break
        case .authorizedAlways:
            //always allow
            break
        case .authorizedWhenInUse:
            // when in use
            break
        @unknown default:
            break
        }

您必须通过 CLLocationManager.requestAlwaysAuthorization() 明确请求(doc) and listen as stated by Apple documentation 在委托回调中

Important

Use of authorizationStatus() is unnecessary and discouraged. Instead, implement the locationManager(_:didChangeAuthorization:) delegate callback to receive up-to-date authorization status.

Listen in delegate 会让您随时了解授权状态的任何 运行 时间变化并做出相应处理。

实际上,我从代码中删除了 CLLocationManager.requestAlwaysAuthorization()

如果您请求 Always Authorization,CLLocationManager.authorizationStatus 将变为 authorizedAlways。

我做的好像如果应用想要始终访问,用户必须转到设置并手动授予始终权限