什么条件使 iOS 13 要求用户授予“始终”位置访问权限?
Posted
技术标签:
【中文标题】什么条件使 iOS 13 要求用户授予“始终”位置访问权限?【英文标题】:What conditions make iOS 13 to ask user to grant 'Always' location access? 【发布时间】:2019-10-01 12:33:00 【问题描述】:我的应用的核心功能是在后台模式下更新位置数据。在 ios 13 中,当我们调用locationManager.requestAlwaysAuthorization()
时,系统会要求用户在变体'Never'
、'Permit Once'
和'When in use'
中进行选择。
如果用户授予'When in use'
访问权限,我们的应用将只能在前台运行。
我无法理解的是:
有时当应用程序进入后台并在一段时间后变得活跃并再次进入后台时,iOS 13 要求用户将位置访问权限更改为 'Always'
我的应用应该怎么做才能让 iOS 13 向用户显示这个对话框? (我想做,当我的应用第一次进入后台时)
附:我知道,我可以使用一些带有文本的自定义警报,例如“请转到系统设置并将此应用的位置访问权限调整为‘始终’模式”。但我需要知道,有什么办法可以使用上述“本机系统流程”吗?
谢谢!
【问题讨论】:
截图在哪里? 当你问的时候我只是在解决这个问题)) 【参考方案1】:我相信这是 iOS 13 的新行为,here 据说
如果您的应用请求并接收使用时授权,您可以 稍后单独请求始终授权。然而,应用程序 只能提出一次始终授权请求。
也可以参考thread
【讨论】:
谢谢!您的链接非常有用,它可以帮助我解决我的问题【参考方案2】:@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()
【讨论】:
【参考方案3】:这是 iOS 13 的新行为。苹果已经实施了这一点,以给用户更多的透明度。详细了解这个变化可以参考这个link
【讨论】:
以上是关于什么条件使 iOS 13 要求用户授予“始终”位置访问权限?的主要内容,如果未能解决你的问题,请参考以下文章