3

我正在 Swift 中构建一个基于运行的应用程序来请求用户的位置。为了这个问题,我们假设该应用程序仅在 iOS 13+ 上运行。启动应用程序后不久,我们通过以下CLLocationManager方法提示用户进行位置访问:requestWhenInUseAuthorization().

然而,这个应用程序实际上一直需要访问用户的位置,因此只能请求“使用时”位置访问权限(根据 iOS 13)限制了用户体验(Zenly 和 Snapchat 等其他应用程序也会这样做,因为它会保持不变位置更新改善了用户和/或朋友的体验)。

提示位置权限后,我们再抓取最新的位置授权状态。如果该值不等于authorizedAlways(除非用户在他/她的设置应用程序中更改该值,否则不会),我们会显示一个新屏幕,基本上告诉用户,“因为这是一个正在运行的应用程序,我们真的需要你的一直定位,所以请转到设置并将权限更改为“始终”,因为我们无法为您执行此操作。”

我在这里遇到的问题是,在监听方法更新时CLLocationManagerDelegatelocationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus)有时该方法会提供不正确的位置授权状态。

具体来说,在用户选择“使用时”并运行应用程序几次后,从该委托方法返回的值经常显示为“始终”,即使手机上的设置应用程序仍然反映原始的、未更改的值(“使用时”)。

以前有没有人遇到过这种情况,如果有,您对可能导致它的原因或如何解决它有任何想法吗?很高兴提供有关我的设置的更多信息。谢谢。

4

0 回答 0