我正在Swift中构建一个基于运行的应用程序,以请求用户的位置。为了解决这个问题,我们假设该应用仅在iOS 13+上运行。启动应用程序后不久,我们通过CLLocationManager
方法requestWhenInUseAuthorization()
提示用户进行位置访问。
但是,此应用实际上始终需要访问用户的位置,因此仅能够请求“使用中”位置访问(根据iOS 13)会限制UX(其他应用(例如Zenly和Snapchat)也是如此)因为获取持续的位置更新可以改善其用户和/或他们的朋友的体验)。
提示输入位置许可后,我们将获取最新的位置授权状态。如果该值不等于authorizedAlways
(除非用户在他/她的“设置”应用中更改该值,否则该值将不存在),我们将显示一个新屏幕,基本上告诉用户:“由于这是一个正在运行的应用,我们确实一直都需要您的位置信息,因此请转到设置并将权限更改为“始终”,因为我们无法为您完成此操作。”
我遇到的问题是,在侦听CLLocationManagerDelegate
方法locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus)
的更新时,有时该方法提供的位置授权状态不正确。
具体来说,在用户选择“使用中”并运行了几次应用程序之后,即使手机上的“设置”应用程序仍反映了原始的,未更改的状态,从该委托方法返回的值也经常显示为“始终”。值(“使用时”)。
以前有人遇到过这个问题吗?如果是,您是否对可能导致它或如何解决它有任何想法?很高兴提供有关我的设置的更多信息。谢谢。