Это то, что я сделал, учитывая предыдущие ответы: (это в MonoTouch C#, но легко переводимые в Swift или Obj-C)
Следующие запрашивают разрешение, а затем приступают к обновлению местоположения. В противном случае, в следующий раз, когда пользователь придет; если место службы отключены или запрещен экран будет выведено сообщение, чтобы запросить разрешение/активацию с перенаправлением к настройкам
//Location Manager (foreground)
CLLocationManager locMgr = new CLLocationManager();
locMgr.PausesLocationUpdatesAutomatically = false;
if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0))
{
locMgr.RequestWhenInUseAuthorization();
}
if (CLLocationManager.LocationServicesEnabled && CLLocationManager.Status == CLAuthorizationStatus.AuthorizedWhenInUse)
{
//set the desired accuracy, in meters
locMgr.DesiredAccuracy = 150;
locMgr.LocationsUpdated += (object sender, CLLocationsUpdatedEventArgs e) =>
{
Console.WriteLine(e.Locations);
};
locMgr.StartUpdatingLocation();
}
else if (!CLLocationManager.LocationServicesEnabled || CLLocationManager.Status == CLAuthorizationStatus.Denied)
{
var alert = UIAlertController.Create(NSBundle.MainBundle.LocalizedString("Location access", "Location access"), NSBundle.MainBundle.LocalizedString("Please check location", "To show your position on the map, you have to enable location services and authorize the app"), UIAlertControllerStyle.Alert);
alert.AddAction(UIAlertAction.Create("Ok", UIAlertActionStyle.Cancel, null));
if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0))
{
alert.AddAction(UIAlertAction.Create(NSBundle.MainBundle.LocalizedString("Go to settings", "Go to settings"), UIAlertActionStyle.Default, delegate
{
var url = new NSUrl(UIApplication.OpenSettingsUrlString);
UIApplication.SharedApplication.OpenUrl(url);
}));
}
PresentViewController(alert, true, null);
}
, что до сих пор нет способа, если пользователь выбирает «разрешить» или «запретить», есть только один раз изменить в приложение установлено – adali