ユーザーの場所を追跡し、これを使用してロードが最初にロードされるときに許可を求めます:
locationManager.requestAlwaysAuthorization()
locationManager.startUpdatingLocation()
ユーザーが拒否したが、後でアプリの構成オプションを有効にすることで気が変わった場合、もう一度尋ねるにはどうすればよいですか?たとえば、ユーザーの位置を自動検出するためのスイッチがあるので、ユーザーが有効にしたときにこれを実行しようとしています:
@IBAction func gpsChanged(sender: UISwitch) {
// Request permission for auto geolocation if applicable
if sender.on {
locationManager.requestAlwaysAuthorization()
locationManager.startUpdatingLocation()
}
}
しかし、このコードは何もしないようです。アプリがユーザーの位置を追跡できるようにするかどうかをユーザーに再度尋ねることを望んでいました。これは可能ですか?
OSはユーザーに一度だけプロンプトを表示します。許可を拒否した場合、それだけです。 canで行うことは、UIApplicationOpenSettingsURLString
をUIApplication
のopenURL:
メソッドに渡すことにより、ユーザーをアプリの設定に誘導することです。必要に応じて、そこから位置情報サービスを再度有効にすることができます。ただし、許可を得るためにそれらを盗聴することについては、あまり積極的であってはなりません。
許可ポップアップは一度だけ表示されます。そのため、ユーザーをSettingsにリダイレクトする必要があります。 Swiftのコードは次のとおりです。
import CoreLocation
@IBAction func userDidClickButton(_ sender: Any) {
// initialise a pop up for using later
let alertController = UIAlertController(title: "TITLE", message: "Please go to Settings and turn on the permissions", preferredStyle: .alert)
let settingsAction = UIAlertAction(title: "Settings", style: .default) { (_) -> Void in
guard let settingsUrl = URL(string: UIApplicationOpenSettingsURLString) else {
return
}
if UIApplication.shared.canOpenURL(settingsUrl) {
UIApplication.shared.open(settingsUrl, completionHandler: { (success) in })
}
}
let cancelAction = UIAlertAction(title: "Cancel", style: .default, handler: nil)
alertController.addAction(cancelAction)
alertController.addAction(settingsAction)
// check the permission status
switch(CLLocationManager.authorizationStatus()) {
case .authorizedAlways, .authorizedWhenInUse:
print("Authorize.")
// get the user location
case .notDetermined, .restricted, .denied:
// redirect the users to settings
self.present(alertController, animated: true, completion: nil)
}
}
別の解決策があります!!アプリのプッシュ通知の受信を許可するようユーザーを説得できる、より良いメッセージで独自のアラートを表示できます。ユーザーが許可する場合、プッシュ通知を有効にするためにデフォルトの許可アラートを表示するだけですアプリのいくつかのイベント。
ユーザーが許可を拒否した後でも許可アラートを処理する通知用の許可マネージャーを含むライブラリを作成しました。
https://github.com/CrazyPro007/PermissionManager/tree/master/PermissionManager/PermissionManager
チャンスは1つだけです。ユーザーが許可を拒否した後に許可を有効にするには、設定アプリを使用する必要があります。 CLLocationManager の位置情報サービスを使用する許可のリクエストを参照してください。