I have an application with an explicit user interaction that makes use of the user's current location. If the user denies access to location services, I would still like subsequent uses to prompt the user to go to settings and re-enable location services for my app.
The behavior I want is that of the built-in Maps app:
- Reset location warnings in Settings > General > Reset > Reset Location Warnings.
- Start Maps app.
- Tap Current Location button in lower left corner.
- Maps prompts with ""Maps" Would Like to Use Your Current Location" | "Don't Allow" | "Allow".
- Choose "Don't Allow" option.
- Tap Current Location button in lower left corner again.
- Maps prompts with "Turn On Location Services to Allow "Maps" to Determine Your Location" | "Settings" | "Cancel".
In my own app, the same basic flow results in my CLLocationManagerDelegate -locationManager:didFailWithError: method being called with a kCLErrorDenied error at the final step and the user is not given the option to open the Settings app to correct it.
I could display my own alert in response to the error, but it would not have the ability to launch the Settings app like the alert that the OS can provide as used by the built-in Maps app.
Is there something in the CLLocationManager class I am missing that would be able to give me this behavior?
I guess you will have an answer to your question when Apple will think about a new SDK. At current time and as far as I know, it's not possible :
No URL-Handler available
No usable method to call
But... As Maps does it, this CAN be done, but probably using a private API. If you're not afraid with this kind of coding, you should search there in my opinion.
Swift,
Once you disable location services for an app, location manager delegate methods will start showing error. So, on receiving error we can check if location services are enabled/disabled. And according to the result, we can ask the user to go to settings and turn on location services.
In your location manager delegate method for error, add location permission check
Code for location permission checking
Code to open settings app,
AlertViews are deprecated in iOS 8. There is now a better way to handle alerts using the new AlertController:
Here's a Swift version of the code in the answer by Markus. This code creates an alert that gives the user the option to open Settings.
In Swift 4, there is an update in its syntax.
Swift 4