【问题标题】:iOS 13 How to check user is given only Always allow location permissioniOS 13如何检查用户只给予始终允许位置权限
【发布时间】:2020-07-15 06:48:37
【问题描述】:

在我的应用程序中,我想检查用户是否被授予“始终允许”的位置权限。因为我在进行位置共享,就像 WhatsApp 位置实时共享一样。

实际上测试用例是,当我们在应用设置中将位置权限状态更改为“使用应用时”并检查应用内按钮单击的状态时,我得到“始终授权”的值。

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

如果我们有“使用应用程序时”权限,我无法区分“使用应用程序时”和“始终”。两者都具有相同的枚举值,即“authorizedAlways”。

但在 WhatsApp 中,如果我将位置权限更改为“使用应用时”并尝试分享我的实时位置,WhatsApp 会在应用设置中显示更改位置权限的提醒。

我也想这样做。

请帮助我在代码级别上有所不同。

【问题讨论】:

  • 请分享更多代码以便更好地理解。您能否用您的整个CLLocationManager 配置更新您的问题?你实现了像didChangeAuthorization 这样的委托方法吗?
  • 您是否要求“始终”?如果是这样,那么您将获得“始终”,因为即使设置显示您具有“使用时”,您也有临时的始终身份验证。一旦 iOS 提示用户升级到始终或在使用时保持,您将开始看到实际权限。

标签: ios swift cllocationmanager ios13


【解决方案1】:

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

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

如果应用程序想要始终访问,用户必须转到设置并手动授予始终权限

【讨论】:

  • iOS 13 和 14 对其进行了更改,并且在始终请求之前,您必须请求 whenInUse。
【解决方案2】:

您必须通过CLLocationManager.requestAlwaysAuthorization() (doc) 明确请求并按照Apple documentation 在委托回调中的说明进行监听

重要

没有必要也不鼓励使用authorizationStatus()。反而, 实现 locationManager(_:didChangeAuthorization:) 委托 回调以接收最新的授权状态。

在委托中监听将使您有可能随时了解授权状态的任何运行时更改并进行相应的处理。

【讨论】:

    【解决方案3】:

    您可以像这样在 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
            }
    

    【讨论】:

    • 谢谢,但我总是得到“authorizedAlways”,即使我设置了“使用时允许”
    • @Sridhar 您能否分享您尝试执行的确切代码?可能有助于确定确切的情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 2020-01-26
    • 2021-07-03
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    相关资源
    最近更新 更多