iOS 13 中“始终允许”位置的问题
Posted
技术标签:
【中文标题】iOS 13 中“始终允许”位置的问题【英文标题】:Issues with "Allow always" location in iOS 13 【发布时间】:2020-01-26 14:40:33 【问题描述】:我有一个取决于用户位置的应用。在 ios 13 之前,该应用程序可以正常工作,但现在它不会发送用户的位置。
我尝试选择“使用应用程序时”选项并等待下一个提示以选择“始终允许”,但它不起作用。选择“使用应用程序时”并转到设置以将选项更改为“始终允许”不起作用。 (这两种情况都是苹果在文档中的“官方”回答)
有什么想法吗? 谢谢
【问题讨论】:
【参考方案1】:从 iOS 13 开始,Apple 将权限屏幕中的“始终允许”替换为“始终一次”,并在设置中移动了“始终允许”。
如果用户选择“始终一次”,那么每次用户启动应用时,应用都会提示位置权限屏幕。
如果用户选择“使用中”,则应用将不会在下次明确用户需要前往设置并授予权限时提示权限屏幕。
从设置中切换到“使用应用程序时”到“始终允许”也可以接收位置更新,这对我有用。
这是我指定的属性
let locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.delegate = self
.
.
.
extension AppDelegate: CLLocationManagerDelegate
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus)
switch status
case .authorizedAlways, .authorizedWhenInUse:
locationManager.startUpdatingLocation()
case .denied:
print("Location permission denied")
case .restricted:
print("Location permission restricted")
case .notDetermined:
print("Location permission notDetermined")
@unknown default:
fatalError()
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
print("Location Update = \(String(describing: locations.first))")
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error)
print("Location Error = \(error.localizedDescription)")
【讨论】:
那行不通。我对 locationManager 有相同的配置,但没有任何反应。当我把它放在后台时,它似乎停止了,尽管它的位置权限设置为“始终”。这在 iOS 13 之前没有发生 @Juanjo 你有解决办法吗?【参考方案2】:这是 iOS 13 本身引入的一项功能。如此处所述:https://engineering.q42.nl/apple-location-permission-ios13/ 如果用户授予您“使用时”权限,并且您尝试在后台扫描位置,则只有这样,用户才会看到一个对话框以授予后台权限。
目前看来问题很大,而且绝对不是一个好的 UX 体验,但现在就是这样!
【讨论】:
【参考方案3】:从 MDM 的角度来看,这非常烦人,因为现在必须使用的位置应用程序会不断询问用户是否仍应允许使用“始终允许”。 管理员需要将此设置为“始终允许”,以便我们可以跟踪 iPad,以防它们丢失/被盗。
【讨论】:
以上是关于iOS 13 中“始终允许”位置的问题的主要内容,如果未能解决你的问题,请参考以下文章
如何在 14 岁以下的 iOS 版本中检查核心位置授权状态?
有啥方法可以强制在 iOS13 的入职过程中出现“始终允许”提示?