Как предложить пользователю снова включить службы геолокации

Я хочу иметь ту же функциональность, что и приложение «Карта», где пользователю предлагается каждый раз, когда он нажимает кнопку «текущее местоположение», включить свои службы определения местоположения, если они отключены:

  • Отключить службы определения местоположения
  • Пользователь нажимает кнопку getCurrentLocation
  • Приложение пытается определить местоположение с помощью CLLocationManager
  • Пользователь получает сообщение «Включить службы определения местоположения ...» с кнопками «Настройки» и «Отмена».
  • Пользователь нажимает "Отмена"
  • Пользователь снова нажимает кнопку getCurrentLocation
  • Приложение снова пытается определить местоположение с помощью CLLocationManager
  • Пользователь больше не получает сообщение "Включить службы определения местоположения ..."

В приложении «Карта» пользователь каждый раз получает сообщение «Включить службы определения местоположения ...». Как я могу заставить мое приложение делать то же самое? Я сделал пользователя, что использую новый экземпляр CLLocationManager, на случай, если это была проблема, но это не так. Я не вижу никаких настроек, которые могли бы повлиять на это.

Если я сделаю собственное оповещение, я не смогу получить те же функции кнопки «Настройки». Кроме того, я не хочу, чтобы пользователь видел несколько одинаковых предупреждений.

Любые идеи?


person toofah    schedule 13.05.2011    source источник
comment
Итак, функциональность, которую мы видим в приложении карт, нельзя воспроизвести в наших собственных приложениях, является ли вывод из всего этого? Кажется, нет решения? Любые обновления? Я работаю над приложением для iOS 7 ...   -  person John Erck    schedule 10.10.2013


Ответы (3)


Новое в iOS 8 есть константа UIApplicationOpenSettingsURLString.

Из документа Что нового в iOS в UIKit это строка:

Вы можете перенаправить пользователя прямо к настройкам вашего приложения в приложении «Настройки». Передайте константу UIApplicationOpenSettingsURLString методу openURL: класса UIApplication.

Из документации Apple :

UIApplicationOpenSettingsURLString

Используется для создания URL-адреса, который можно передать методу openURL :. Когда вы открываете URL-адрес, созданный из этой строки, система запускает приложение "Настройки" и отображает пользовательские настройки приложения, если они есть.

Вы можете передать это в метод openURL: UIApplication. Это может выглядеть примерно так:

NSURL *settings = [NSURL URLWithString:UIApplicationOpenSettingsURLString];

if ([[UIApplication sharedApplication] canOpenURL:settings])
    [[UIApplication sharedApplication] openURL:settings];
person Aaron Wasserman    schedule 10.09.2014
comment
Это старый вопрос, но это правильный ответ в 2014 году. - person Jessedc; 21.09.2014

Если вы хотите направить пользователя обратно на экран «Службы геолокации» в приложении «Настройки», вы можете сделать это, отправив его по специальному URL-адресу, например так:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"prefs:root=LOCATION_SERVICES"]];
person Jacob White    schedule 12.02.2012
comment
По-видимому, больше нет. (stackoverflow.com/questions/9627451/) - person Matthew Lowe; 25.09.2012

Вы можете запросить общий экземпляр CLLocationManager, если включена служба определения местоположения. Правильный способ - уважать решение пользователей отключить службы определения местоположения.

Но если вы хотите, просто запустите службу определения местоположения, и пользователю будет предложено запустить ее снова. Если пользователь соглашается на запрос, местоположения начнут сообщаться вашему делегату как обычно. Если вместо этого пользователь отклоняет ваш запрос, вы получите обратный вызов метода делегата locationManager:didFailWithError:. Ошибка будет иметь код ошибки kCLErrorDenied.

Я бы настоятельно отговаривал вас от этого, но вы можете попробовать запустить службу снова, если пользователь откажется, и у пользователя снова появится запрос. Однако большинство пользователей возненавидят вас за это.

person PeyloW    schedule 13.05.2011
comment
+1 пользователь должен только решить, хотят ли они разрешить приложению использовать свое местоположение в какой-то момент, я заметил, что многие приложения, которые я недавно использовал, регулярно запрашивают разрешение, даже если оно не было разрешено в прошлом, что я не фанат из - person Matt; 14.05.2011
comment
дать согласие. Если ваше приложение полагается на службы определения местоположения для каких-либо значительных функций, хороший способ сделать это - определить, когда службы определения местоположения отключены, и представить в вашем приложении пассивный пользовательский интерфейс, который уведомляет пользователей и позволяет им снова включать службы определения местоположения. Если пользователь соглашается, вы можете запустить службы определения местоположения, которые предложат пользователю включить их. - person XJones; 14.05.2011
comment
Спасибо за ваш отзыв. Я с вами и совершенно не хочу раздражать своих пользователей повторными просьбами разрешить моему приложению доступ к службам определения местоположения. Но в этом случае пользователь нажимает кнопку получения текущего местоположения, поэтому кажется уместным сказать им, что им нужно включить это. Это то же самое, что и в приложении «Карта», когда пользователь нажимает кнопку «Получить текущее местоположение». Я делаю то, что вы предлагаете, вызываю метод монитора запуска, но он не запрашивает повторного запроса пользователя, я просто получаю ошибку kCLErrorDenied. - person toofah; 14.05.2011
comment
Это неверно. После того, как отображается вид предупреждения об авторизации служб определения местоположения, пользователи никогда не увидят его снова. Всегда. (Несмотря на сброс телефона.) Даже удаление и повторная установка приложения не представят его снова. Единственный способ, которым пользователь может восстановить авторизацию службы определения местоположения, - это перейти в приложение «Настройки» и повторно включить его напрямую. - person Yetanotherjosh; 12.08.2011
comment
@Yetanotherjosh. Кроме того, предупреждения о местоположении можно сбросить вручную в Настройки ›Общие› Сброс ›Сбросить предупреждения о местоположении. - person MattyG; 12.11.2011
comment
@MattyG действительно, я недавно сам это видел. Похоже, что они были добавлены в недавних обновлениях ОС, или я пропустил это? В любом случае, это удобно. Также обратите внимание, что теперь в iOS 5 удаление и переустановка приложения приведет к сбросу всех этих типов вопросов о разрешениях, так что, действительно, мое никогда, никогда не было теперь недействительным по нескольким причинам. - person Yetanotherjosh; 14.11.2011