在我的应用程序中,我有一个名为“发现”的选项卡. “发现”选项卡将使用用户当前位置在其附近找到“东西”.而不是向使用者呈现通用的授权请求(通常会根据研究被拒绝),我向用户介绍一个模式来解释我们要求的内容.如果他们说是,那么就会弹出实际的授权消息.
但是,用户仍然可以选择不提示.有没有办法向提示添加回调,以便一旦用户选择一个选项,我可以看到他们接受或拒绝?
我试过这个:
func promptForLocationDataAccess() { locationManager.requestWhenInUseAuthorization() println("test") }
正如预期的那样,“println”在请求提示出现的同时执行,所以我不能这样做.
问题是如果用户选择不使用位置数据,则所提供的内容将不同于接受的内容.
理想情况下,我希望有一种回调,但我现在应该采取任何逻辑的方向!
解决方法
你可以使用
locationManager:didChangeAuthorizationStatus:
CLLocationManagerDelegate方法作为“回调”的排序.
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status { if (status == kCLAuthorizationStatusDenied) { // The user denied authorization } else if (status == kCLAuthorizationStatusAuthorized) { // The user accepted authorization } }
而在Swift(由用户Michael Marvick建议的更新,但由于某些原因被拒绝)):
func locationManager(manager: CLLocationManager,didChangeAuthorizationStatus status: CLAuthorizationStatus) { if (status == CLAuthorizationStatus.Denied) { // The user denied authorization } else if (status == CLAuthorizationStatus.AuthorizedAlways) { // The user accepted authorization } }