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

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

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

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

Но, кажется, не может направить непосредственно к пути ограничений через path параметр:

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

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

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

14 ответов

Решение

КАК @Nix Ван отвечает, что это не работает в IOS 10


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

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

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

  • префы: корень = Общие и путь = О
  • префы: корень = Общие и путь = ДОСТУПНОСТИ
  • префы: корень =AIRPLANE_MODE
  • префы: корень = Общие и путь =AUTOLOCK
  • префы: корень = Общие и путь =USAGE/CELLULAR_USAGE
  • префы: корень = Яркость
  • префы: корень = Общие и путь =Bluetooth
  • префы: корень = Общие и путь =DATE_AND_TIME
  • префы: корень =FaceTime
  • префы: корень = Общие
  • префы: корень = General & путь =Keyboard
  • префы: корень = ЗАМОК
  • префы: корень = ЗАМОК & путь =STORAGE_AND_BACKUP
  • префы: корень = General & путь = INTERNATIONAL
  • Prefs: корень =LOCATION_SERVICES
  • Prefs: корень =ACCOUNT_SETTINGS
  • префы: корень = МУЗЫКА
  • префы: корень = МУЗЫКА & путь =EQ
  • префы: корень = МУЗЫКА & путь =VolumeLimit
  • префы: корень = Общие и путь = Сеть
  • префы: корень =NIKE_PLUS_IPOD
  • Prefs: корневые = ПРИМЕЧАНИЯ
  • префы: корень = NOTIFICATIONS_ID
  • префы: корень = Телефон
  • Prefs: корневые = Фотографии
  • префы: корень = Общие и путь =ManagedConfigurationList
  • префы: корень = Общие и путь = Сброс
  • префы: корень = Звуки & путь = Мелодия
  • префы: корень = Safari
  • префы: корень = General & путь = помощник
  • Prefs: корень = Звуки
  • префы: корень = Общие и путь =SOFTWARE_UPDATE_LINK
  • префы: корень = STORE
  • префы: корень =TWITTER
  • префы: корень = Общие и путь = ИСПОЛЬЗОВАНИЕ
  • префы: корень = ВИДЕО
  • префы: корень = Общие и путь = Сеть /VPN
  • префы: корень = обои
  • префы: корень =WIFI
  • префы: корень =INTERNET_TETHERING

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

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

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

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

Обновить:

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

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

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

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

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

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

prefs:root=General&path=Keyboard

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

prefs:root=General&path=Keyboard/KEYBOARDS

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

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

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

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

NSURL *URL = [NSURL URLWithString:@"App-prefs:root=TWITTER"];
[[UIApplication sharedApplication] openURL:URL options:@{} completionHandler:nil];

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

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

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

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

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

В iOS16/Swift 5 для перехода к определенному поднабору, например, настройкам батареи:

        if let url = URL(string: "App-prefs:BATTERY_USAGE") {
    UIApplication.shared.open(url) { accepted in
        print(accepted ? "Success" : "Failure")
    }
  }

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

if(&UIApplicationOpenSettingsURLString != nil){
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
}

iOS 10

использование app-prefs:

App-prefs:root=MOBILE_DATA_SETTINGS_ID

См суть

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

  1. После того, как у меня определена схема URL "prefs", "prefs: root = Safari & path = ContentBlockers" работает на Simulator (iOS 9.1 на английском языке), но не работает на Simulator (упрощенный китайский). Это просто переход на Safari, но не блокировщики контента. Если ваше приложение является международным, будьте осторожны.
    Обновление: не знаю почему, теперь я не могу больше переходить на 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.

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

Другие вопросы по тегам