2017-03-26 24 views
1

ユーザーが自分の場所を拒否し、アプリケーション全体が現在の場所に基づいている状況を処理する適切な方法は何ですか? viewDidAppearのlocationAuthorization()を呼び出すと、ユーザーがその場所を許可したときに正常に動作します。ユーザーが場所を拒否したときに場所の要求を表示する

func locationAuthorization(){ 
    if CLLocationManager.authorizationStatus() == .authorizedWhenInUse{ 
     refreshData() 

    } else if (CLLocationManager.authorizationStatus() == .denied) { 
     addressButton.isHidden = true 
    } else { 
     locationManager.requestWhenInUseAuthorization() 
     sleep(2) 
     locationAuthorization() 
    } 
} 

私は.denied文の中locationAuthorization()を呼び出すようにしようとしていたが、それは明らかに動作しませんでした。 locationManager.requestWhenInUseAuthorization()を入れてもうまくいきませんでした。 ユーザーが「許可しない」をクリックしたときの状況を処理する最善の方法は何ですか?それは私のアプリケーションを使用できなくするので、ユーザーがそれを受け入れるまで場所ウィンドウを表示する必要があります。

let alert = UIAlertController(title: "Need Authorization", message: "This app is unusable if you don't authorize this app to use your location!", preferredStyle: .alert) 
alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil)) 
alert.addAction(UIAlertAction(title: "Settings", style: .default, handler: { _ in 
    let url = URL(string: UIApplicationOpenSettingsURLString)! 
    UIApplication.shared.open(url, options: [:], completionHandler: nil) 
})) 
self.present(alert, animated: true, completion: nil) 

あなたは再び認証を要求することはできませんが、設定でそれを変更する人々に伝えることができます。この.denied部分で

+1

許可、睡眠を要求してからもう一度 'locationAuthorization'を呼び出すロジックはひどいです。そんなことはしないでください。 – rmaddy

+0

そして、他のケースを適切に処理する必要があります。現在不明な場合にのみ承認を要求してください。制限されている場合でも要求しています。それは一種の意味がありません。 – rmaddy

+0

@rmaddy私は睡眠が最良の選択肢ではないことを知っていますが、それがなければ機能しませんでした。 – codddeer123

答えて

2

場所。

+1

私は「OK」ボタンを「設定」とし、「いいえ」ボタンを「キャンセル」とラベルします。 – rmaddy

関連する問題