什么条件使 iOS 13 要求用户授予 'Always' 位置访问权限?
What conditions make iOS 13 to ask user to grant 'Always' location access?
我的应用程序的核心功能是在后台模式下更新位置数据。在 iOS 13 中,当我们调用 locationManager.requestAlwaysAuthorization()
时,系统会要求用户在变体 'Never'
、'Permit Once'
和 'When in use'
中进行选择。
如果用户授予 'When in use'
访问权限,我们的应用将只能在前台运行。
我无法理解的事情如下:
有时当应用程序进入后台并在一段时间后变得活跃并再次进入后台时,iOS 13 要求用户将位置访问权限更改为 'Always'
我的应用程序应该怎么做才能使 iOS13 向用户显示此对话框? (我想这样做,当我的应用第一次进入后台时)
P.S。我知道,我可以使用一些带有 "please, go to system settings and adjust location access for this app to 'Always' mode" 等文本的自定义警报。但我需要知道,有没有办法像上面描述的那样使用 "native system flow"?
谢谢!
我认为这是新的 iOS 13 行为,here 据说
If your app requests and receives When In Use authorization, you can
make a separate request for Always authorization later. However, apps
may make only one request for Always authorization.
也可以参考这个thread
这是新的 iOS 13 行为。这已由 Apple 实施,为用户提供更多透明度。想要详细了解这个变化可以参考这个link
@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()
我的应用程序的核心功能是在后台模式下更新位置数据。在 iOS 13 中,当我们调用 locationManager.requestAlwaysAuthorization()
时,系统会要求用户在变体 'Never'
、'Permit Once'
和 'When in use'
中进行选择。
如果用户授予 'When in use'
访问权限,我们的应用将只能在前台运行。
我无法理解的事情如下:
有时当应用程序进入后台并在一段时间后变得活跃并再次进入后台时,iOS 13 要求用户将位置访问权限更改为 'Always'
我的应用程序应该怎么做才能使 iOS13 向用户显示此对话框? (我想这样做,当我的应用第一次进入后台时)
P.S。我知道,我可以使用一些带有 "please, go to system settings and adjust location access for this app to 'Always' mode" 等文本的自定义警报。但我需要知道,有没有办法像上面描述的那样使用 "native system flow"?
谢谢!
我认为这是新的 iOS 13 行为,here 据说
If your app requests and receives When In Use authorization, you can make a separate request for Always authorization later. However, apps may make only one request for Always authorization.
也可以参考这个thread
这是新的 iOS 13 行为。这已由 Apple 实施,为用户提供更多透明度。想要详细了解这个变化可以参考这个link
@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()