iOS 13在什么条件下要求用户授予“始终”位置访问权限?

时间:2019-10-01 12:33:00

标签: ios cllocationmanager ios13

我的应用程序的核心功能是在后台模式下更新位置数据。在iOS 13中,当我们调用locationManager.requestAlwaysAuthorization()时,系统会要求用户在变体'Never''Permit Once''When in use'中进行选择。

screenshot 1

如果用户授予'When in use'访问权限,则我们的应用只能在前台运行。

我不明白的是: 有时,当应用程序进入后台并且一段时间后又激活并再次进入后台时,iOS 13要求用户将位置访问权限更改为'Always'

see screenshot 2

我的应用程序应如何使iOS 13向用户显示此对话框? (我想在我的应用第一次进入后台时这样做)

P.S。我知道,我可以在文本中使用一些自定义提醒,例如“请转到系统设置并将此应用的位置访问权限调整为“始终”模式”。但是我需要知道,有没有办法使用如上所述的“本机系统流”?

谢谢!

3 个答案:

答案 0 :(得分:2)

我相信这是iOS 13的新行为,here据说

  

如果您的应用请求并获得使用中授权,则可以   稍后再单独请求“始终授权”。但是,应用程序   只能提出一个“始终授权”请求。

您也可以查看此thread

以供参考

答案 1 :(得分:1)

这是新的iOS 13行为。苹果已经实施了此操作,以使用户更加透明。要详细了解此更改,您可以参考此link

答案 2 :(得分:1)

@Claudio的答案可以帮助我解决问题。我发现它可以在具有'When in use'权限的后台访问位置。为此,您必须设置locationManager.showsBackgroundLocationIndicator = true

这是我的locationManager调整项:

        let locationManager = CLLocationManager()
        if #available(iOS 9, *){
            locationManager.allowsBackgroundLocationUpdates = true
        }
        locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters
        locationManager.distanceFilter = kCLDistanceFilterNone
        locationManager.headingFilter = kCLHeadingFilterNone
        locationManager.pausesLocationUpdatesAutomatically = true
        locationManager.activityType = .otherNavigation
        if #available(iOS 11.0, *) {
            locationManager.showsBackgroundLocationIndicator = true;
        }
        locationManager.delegate = self
        locationManager.startMonitoringSignificantLocationChanges()