我的应用程序的核心功能是在后台模式下更新位置数据。在iOS 13中,当我们调用locationManager.requestAlwaysAuthorization()
时,系统会要求用户在变体'Never'
,'Permit Once'
和'When in use'
中进行选择。
如果用户授予'When in use'
访问权限,则我们的应用只能在前台运行。
我不明白的是:
有时,当应用程序进入后台并且一段时间后又激活并再次进入后台时,iOS 13要求用户将位置访问权限更改为'Always'
我的应用程序应如何使iOS 13向用户显示此对话框? (我想在我的应用第一次进入后台时这样做)
P.S。我知道,我可以在文本中使用一些自定义提醒,例如“请转到系统设置并将此应用的位置访问权限调整为“始终”模式”。但是我需要知道,有没有办法使用如上所述的“本机系统流”?
谢谢!
答案 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()