Настройки запуска iOS -> Схема URL-адресов ограничений

86

Недавно я обнаружил потрясающую схему URL-адресов пользовательских настроек iOS5 , которую можно подробно объяснить на этом замечательном веб-сайте .

Я обнаружил, что это работает, направляя пользователя в приложение настроек из моего приложения:

[[UIApplication sharedApplication] openURL:
       [NSURL URLWithString:@"prefs:root=General"]];

Но, похоже, не может напрямую перейти к пути ограничений через pathпараметр:

[[UIApplication sharedApplication] openURL:
   [NSURL URLWithString:@"prefs:root=General&path=Restrictions"]];

Кто-нибудь нашел документацию по этому поводу или смог сделать эту работу?

Приветствуется любое понимание. Я пытаюсь заставить пользователя включить покупку в приложении и не хотел бы, чтобы пользователь вручную нажимал на Ограничения (не очень очевидно).

kturner
источник
2
кто-нибудь знает URL-адрес Touch ID и пароль?
Фабиан Кебель
1
используйте это для идентификатора касания: prefs: root = TOUCHID_PASSCODE ( stackoverflow.com/questions/35410746/… )
Фабиан Кебель

Ответы:

144

КАК ОТВЕТ @Nix Wang : ЭТО НЕ РАБОТАЕТ В IOS 10


ВНИМАНИЕ: этот метод не будет работать для устройств под управлением iOS 5.1 и выше - см. Комментарий Хлунга ниже.

Возможно, что pathкомпонент имеет другое имя, чем фактический раздел, но также возможно, что в настоящее время вы не можете получить доступ к этому разделу прямо по URL-адресу. Я нашел список возможных URL-адресов, и в нем нет ограничений, возможно, он просто еще не выяснен.

Список известных на данный момент URL-адресов в приложении "Настройки":

  • prefs: root = General & path = About
  • префы: корень = Общие & путь = ДОСТУПНОСТЬ
  • префы: корень = AIRPLANE_MODE
  • префы: root = General & path = AUTOLOCK
  • префы: root = General & path = USAGE / CELLULAR_USAGE
  • prefs: root = Яркость
  • префы: корень = Общие и путь = Bluetooth
  • префы: root = General & path = DATE_AND_TIME
  • префы: root = FACETIME
  • префы: корень = Общие
  • префы: корень = Общие & путь = Клавиатура
  • префы: корень = ЗАМОК
  • префы: корень = ЗАМОК & путь = STORAGE_AND_BACKUP
  • префы: root = General & path = INTERNATIONAL
  • префы: root = LOCATION_SERVICES
  • префы: root = ACCOUNT_SETTINGS
  • префы: корень = МУЗЫКА
  • префы: корень = МУЗЫКА & путь = EQ
  • префы: корень = МУЗЫКА & путь = VolumeLimit
  • префы: корень = Общие & путь = Сеть
  • префы: корень = NIKE_PLUS_IPOD
  • префы: root = ПРИМЕЧАНИЯ
  • префы: root = NOTIFICATIONS_ID
  • префы: root = Телефон
  • prefs: root = Фотографии
  • префы: корень = Общие & путь = ManagedConfigurationList
  • префы: root = Общие и путь = Сброс
  • prefs: root = Звуки и путь = Мелодия
  • префы: корень = Safari
  • prefs: root = General & path = Assistant
  • prefs: root = Звуки
  • префы: root = General & path = SOFTWARE_UPDATE_LINK
  • префы: root = STORE
  • префы: root = TWITTER
  • префы: корень = Общие & путь = ИСПОЛЬЗОВАНИЕ
  • префы: корень = ВИДЕО
  • префы: корень = Общие & путь = Сеть / VPN
  • prefs: root = Обои
  • префы: корень = WIFI
  • префы: root = INTERNET_TETHERING
Анри Нормак
источник
54
Просто любезное предупреждение, idownloadblog.com/2011/11/29/iphone-5-1-disables-shortcuts сказал, что все схемы URL-адресов для настроек iOS будут удалены в iOS5.1 (поэтому URL-адреса, такие как prefs: root = General & path = Network работать больше не будет) Так что знайте.
Hlung
3
Они не удаляются полностью, вам просто нужно поместить эти URL-ссылки в кнопку в UIAlertView. Так что просто поместите предупреждение в UIAlertView, что приложение перейдет в фоновый режим и откроются настройки, а затем ОК, Отмена и т. Д.
zambono
4
Он больше не работает, он работал над одним из моих приложений некоторое время назад, но больше не работает.
zambono
5
Начиная с iOS8, вы можете запустить встроенное приложение «Настройки» с URL-адресом:[NSURL URLWithString:UIApplicationOpenSettingsURLString]
Джейсон Мур,
2
Любое решение / альтернатива для ios10, пожалуйста.
ranjit.x.singh
48

Начиная с iOS8 вы можете открыть встроенное приложение настроек с помощью:

NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
   [[UIApplication sharedApplication] openURL:url];
}

Фактическая строка URL-адреса - @"app-settings:". Я пробовал добавлять в строку разные разделы («Bluetooth», «ОБЩИЕ» и т. Д.), Но, похоже, работает только ссылка на главный экран настроек. Отправьте ответ, если узнаете иное.

Джейсон Мур
источник
10
Это потому, что этот конкретный вызов - это URL-адрес запуска настроек. Он открывает пользовательские настройки приложения, если они существуют. Если нет, он просто открывает приложение «Настройки» на главном экране. developer.apple.com/library/ios/documentation/UIKit/Reference/…
JAL
1
Прекрасный ответ, если в вашем приложении есть определенные настройки, которые вы хотите включить / отключить. Все в одном месте, и пользователю не нужно перемещаться по настройкам, чтобы получить желаемую конфигурацию. Благодарность!
kyleturner
1
@ FabianKöbel Удалось ли вам найти устройство для TouchID и пароля?
ShayanK
1
@AspersionCast: вы можете использовать это: prefs: root = TOUCHID_PASSCODE ( stackoverflow.com/questions/35410746/… )
Фабиан Кебель
Похоже, что это единственный одобренный в настоящее время Apple способ запуска приложения «Настройки».
u2Fan 01
42

Если вы добавите схему URL-адресов prefs в свое приложение для iOS, это позволит вам использовать все те схемы, которые мы могли использовать в iOS 5. Я тестировал ее на iOS 9, но я думаю, что она будет работать и в более старых версиях.

Педро Торрес
источник
Этот трюк работает только начиная с iOS 8, где в этом нет необходимости.
Валерий Ван
1
Но то же самое в iOS 8 вам не разрешено открывать настройки Wi-Fi, например, если вы не добавляете этот позор URL в свое приложение.
Педро Торрес
Да ты прав. Не думал об этом варианте использования.
Валерий Ван
9
@conorgriffin Для вас и всех, кому интересно, что сеттинг находится под: Targets | (Приложение) | Информация | Типы URL | +
Кевин Сильвестр
Кто-то сказал, что ему отказали за использование URL-адреса prefs: root. stackoverflow.com/questions/8246070/…
Hlung
33

Обновить:

prefs: НЕ будет работать с iOS 10.

Никс Ван
источник
4
Какая альтернатива?
OXXY
1
Это безумие, поскольку этот официальный документ Apple Doc ( developer.apple.com/library/ios/qa/qa1924/_index.html ) преднамеренно адресует проблему с привилегиями и датирован 2 августа 2016 года.
daspianist 02
1
В этом документе говорится только об использовании его для настроек клавиатуры (любое другое использование является нарушением)
Питер Джонсон,
К сожалению, похоже, что это не работает даже с настройками клавиатуры в iOS 10.
Сложности
4
Хотя это prefs:больше не работает, следующее работает (по крайней мере, в общих чертах):App-Prefs::root=Settings&path=General
daspianist
22

Да, видел это (и многое другое), даже реализовал это в тестовом приложении. На самом деле необходимо получить окончательное слово от Apple, но по общему мнению сообщества, Apple запретила его в версии 5.1 после того, как он был публично «обнаружен / опубликован», поэтому приложения, содержащие его, не будут приняты.

08/01/12 Обновление: спросил Apple через мою учетную запись разработчика, есть ли способ программно запустить диалоговое окно настроек WiFi. Вот ответ:

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

Дэн
источник
9
Я рекомендую всем, кому нужна эта функция, регистрировать официальный отчет об ошибке. Чем больше об этом сообщается, тем больше это будет видно и больше шансов, что поддерживаемое решение может быть представлено в будущем. bugreport.apple.com
Мэтт Коннолли
18

В iOS 9 снова работает!

Чтобы открыть Настройки> Общие> Клавиатура , я использую:

prefs:root=General&path=Keyboard

Более того, на Клавиатуры можно пойти дальше :

prefs:root=General&path=Keyboard/KEYBOARDS
Михаил
источник
Я только что заметил это в приложении PopKey. Я попробовал URL-адрес для Настройки> Настройки Wi-Fi, и он тоже работает. Будем надеяться, что это останется.
Джейми МакДэниел
Эти схемы должны быть добавлены ли LSApplicationQueriesSchemesв info.plist?
Warpling
2
Нет, не делают. Просто используйте его с методом openURL :.
Михаил
1
Я пытаюсь использовать это для ссылки на настройки с веб-страницы, и, похоже, он работает в Safari на iPhone, но не на iPad. Оба находятся на 9.0.2. Серьезно, Apple?
Рэнди Х.
3
По-прежнему необходимо добавить схему URL-адресов prefs для таргетинга
shim
7

Я хотел открыть меню Bluetooth в приложении настроек, но указанный выше путь (prefs: root = General & path = Bluetooth) у меня не работал. Что в итоге сработало для меня, так это

UIApplication.sharedApplication().openURL(NSURL(string:"prefs:root=Bluetooth")!)

prefsСначала убедитесь, что у вас определена схема URL.

Махеш
источник
Это связано с тем, что меню Bluetooth было перемещено в последних версиях iOS. Теперь это настройка верхнего уровня, а не в разделе Общие .
Nate
@ Имран: Ты забыл prefsпро материал.
Майкл Дорнер,
5

Решение для iOS10. Работает отлично.

NSURL *URL = [NSURL URLWithString:@"App-prefs:root=TWITTER"];
[[UIApplication sharedApplication] openURL:URL options:@{} completionHandler:nil];
pararmswar Разработчики
источник
Это законно? Успешная отправка приложения не означает, что это законно. Он может в конечном итоге потерпеть неудачу в будущем ..
Стас
@Stas: Нет, это частный API.
Tejas K
4

Начиная с iOS10 вы можете использовать

UIApplication.sharedApplication().openURL(NSURL(string:"App-Prefs:root")!) 

чтобы открыть общие настройки.

также вы можете добавить к нему известные URL-адреса (вы можете увидеть их в ответе, получившем наибольшее количество голосов), чтобы открыть определенные настройки. Например, ниже открывается touchID и пароль.

UIApplication.sharedApplication().openURL(NSURL(string:"App-Prefs:root=TOUCHID_PASSCODE")!)
mkeremkeskin
источник
1
«App-Prefs: root = TOUCHID_PASSCODE» не работает на iOS 11. Есть другое решение?
myaug
App-Prefs- это частный API, который приведет к отклонению приложения во время проверки.
Tejas K
2

Вот еще кое-что, что я нашел:

  1. После того, как я определил схему URL-адресов «prefs», «prefs: root = Safari & path = ContentBlockers» работает с Simulator (iOS 9.1 на английском языке ), но не работает с Simulator (упрощенный китайский) . Он просто переходит в Safari, но не в Content Blockers. Если ваше приложение является международным, будьте осторожны.
    Обновление: не знаю почему, теперь я больше не могу перейти в ContentBlockers, тот же код, та же версия теперь не работает. :(

  2. На реальных устройствах (у меня iPhone 6S и iPad mini 2) «Safari» должно быть «SAFARI» , «Safari» не работает на реальном устройстве, «SAFARI» теперь работает на симуляторе:

    #if arch(i386) || arch(x86_64)
        // Simulator
        let url = NSURL(string: "prefs:root=Safari")!
    #else
        // Device
        let url = NSURL(string: "prefs:root=SAFARI")!
    #endif
    
    if UIApplication.sharedApplication().canOpenURL(url) {
        UIApplication.sharedApplication().openURL(url)
    }
    
  3. Пока не обнаружил отличий между iPhone и iPad.

Кайюань Сюй
источник
У вас когда-нибудь это снова работало? Как жаль, если нет!
Райан Броди
@RyanBrodie Что вы имеете в виду под "таким позором"?
Кайюань Сюй
Это очень прискорбно, было бы здорово добавить прямую ссылку в настройки блокировщика контента Safari
Райан Броди,
6
@RyanBrodie Даже если бы это могло сработать, я предлагаю вам не использовать его для приложений App Store прямо сейчас, я только что получил "отклонено" от iTunes Connect сегодня утром, поскольку "prefs: root" - это частный API (есть приложения используя prefs: root в App Store ... Бог знает почему)
Кайюань Сюй
Я не понимал, что большое спасибо за внимание!
Райан Броди
2

Прекрасно работает для настроек уведомлений приложений на IOS 10 (проверено)

if(&UIApplicationOpenSettingsURLString != nil){
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
}
Mrsantateam
источник
2

iOS 10

Использовать app-prefs:

App-prefs:root=MOBILE_DATA_SETTINGS_ID

Увидеть суть

Алекс Хедли
источник
0

Я обновляю одну новость здесь. Использование только prefs: НЕ отклоняется Apple, я протестировал его и проверил, одобрено в магазине приложений (в августе 2016 г.). Спасибо.

Корейский
источник
Я использую это [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=DO_NOT_DISTURB"]];для открытой настройки DND устройства. Apple отклонит это?
Шреянк
Прошла только рецензию или тоже работает? Я имею в виду, открывает ли openURL вас настройки? С моей стороны это не сработало.
Ахмет Аккёк