Налаштування запуску iOS -> Схема URL-адреси обмежень


86

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

Я виявив, що це працює, спрямувавши користувача до програми Налаштування з моєї програми:

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

Але, здається, не може спрямовуватися безпосередньо на шлях обмежень через pathпараметр:

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

Хтось знайшов документацію щодо цього чи зміг зробити цю роботу?

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


2
хтось знає URL-адресу Touch ID і пароля?
Фабіан Кобел

1
використовувати це для сенсорного ID: префи: корінь = TOUCHID_PASSCODE ( stackoverflow.com/questions/35410746 / ... )
Fabian Кобель

Відповіді:


144

ЯК ВІДПОВІДЬ @Nix Wang ЦЕ НЕ ПРАЦЮЄ В IOS 10


ПОПЕРЕДЖЕННЯ: Цей метод не буде працювати на пристроях з iOS 5.1 та новіших версій - Див. Коментар Hlung нижче.

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

Список відомих на даний момент URL-адрес у програмі Налаштування:

  • prefs: root = Загальне & шлях = Про
  • prefs: root = Загальне & шлях = ДОСТУПНІСТЬ
  • prefs: root = AIRPLANE_MODE
  • prefs: root = Загальні & шлях = AUTOLOCK
  • prefs: root = Загальне & шлях = ВИКОРИСТАННЯ / КЛІТОВИЙ_ВИКОРИСТАННЯ
  • prefs: root = Яскравість
  • prefs: root = Загальні & шлях = Bluetooth
  • prefs: root = Загальні & шлях = DATE_AND_TIME
  • prefs: root = FACETIME
  • prefs: root = Загальне
  • prefs: root = Загальне & path = Клавіатура
  • prefs: root = ЗАМОК
  • prefs: root = CASTLE & path = STORAGE_AND_BACKUP
  • prefs: root = Загальне & шлях = МІЖНАРОДНИЙ
  • prefs: root = LOCATION_SERVICES
  • prefs: root = ACCOUNT_SETTINGS
  • prefs: root = MUSIC
  • prefs: root = MUSIC & path = EQ
  • prefs: root = MUSIC & path = VolumeLimit
  • prefs: root = Загальне & path = Мережа
  • prefs: root = NIKE_PLUS_IPOD
  • prefs: root = ПРИМІТКИ
  • prefs: root = NOTIFICATIONS_ID
  • prefs: root = Телефон
  • prefs: root = Фотографії
  • prefs: root = Загальне & path = ManagedConfigurationList
  • prefs: root = Загальні & шлях = Скинути
  • prefs: root = Звуки & шлях = Рінгтон дзвінка
  • prefs: root = Safari
  • prefs: root = Загальні & шлях = Помічник
  • prefs: root = Звуки
  • prefs: root = Загальні & шлях = SOFTWARE_UPDATE_LINK
  • prefs: root = STORE
  • prefs: root = TWITTER
  • prefs: root = Загальні & шлях = ВИКОРИСТАННЯ
  • prefs: root = ВІДЕО
  • prefs: root = Загальне & path = Мережа / VPN
  • prefs: root = Шпалери
  • prefs: root = WIFI
  • prefs: 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", "GENERAL" тощо), але, схоже, працює лише посилання на головний екран налаштувань. Надішліть відповідь, якщо з’ясуєте інше.


10
Це тому, що саме цей виклик є URL-адресою запуску налаштувань. Він відкриває спеціальні налаштування програми, якщо вони існують. Якщо ні, він просто відкриває додаток Налаштування на головний екран. developer.apple.com/library/ios/documentation/UIKit/Reference/…
JAL

1
Фантастична відповідь, якщо у вашому додатку є певні налаштування, які потрібно ввімкнути / вимкнути. Все в одному місці, і вам не потрібно переходити користувачеві через Налаштування, щоб перейти до бажаної конфігурації. Дякую!
kyleturner

1
@ FabianKöbel чи змогли ви знайти такий для TouchID і пароля?
ShayanK

1
@AspersionCast: ви можете використовувати це: префи: корінь = TOUCHID_PASSCODE ( stackoverflow.com/questions/35410746 / ... )
Fabian Кобель

Здається, це єдиний схвалений компанією Apple метод запуску налаштувань.
u2Fan

42

Якщо ви додасте схему URL-адрес prefs до свого додатка для iOS, це дозволить вам використовувати всі ті схеми, які ми могли б мати в iOS 5. Я протестував її на iOS 9, але, думаю, вона буде працювати і в старих версіях.


Цей трюк працює лише з iOS 8 там, де в ньому немає потреби.
Валерій Ван

1
Але в iOS 8 вам не дозволяється відкривати налаштування Wi-Fi, наприклад, якщо ви не додасте цей URL-ганьба до свого додатка.
Педро Торрес,

Так, ти правий. Не думав про цей варіант використання.
Валерій Ван

9
@conorgriffin Для вас та всіх, хто цікавиться, що обстановка живе під: Цілі | (Заявка) | Інформація | Типи 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.08.2016.
даспіаніст,

1
У цьому документі сказано лише використовувати його для налаштувань клавіатури (будь-що, крім цього конкретного використання, є порушенням.)
Пітер Джонсон,

На жаль, це, здається, не працює навіть для налаштувань клавіатури в iOS 10.
Запрошення

4
Поки це prefs:вже не працює, працює (принаймні, у відкритті загалом):App-Prefs::root=Settings&path=General
даспіаніст

22

Так, побачив це (і багато іншого), навіть реалізував це в тестовому додатку. Дійсно, потрібно отримати остаточне слово від Apple, але спільна думка спільноти полягає в тому, що Apple заборонила його в 5.1 після того, як його було публічно "виявлено / опубліковано", тому додатки, що містять це, не прийматимуться.

01.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, і вона також працює. Будемо сподіватися, що це залишиться.
Jamie McDaniel

Ці схеми повинні бути додані чи LSApplicationQueriesSchemesв info.plist?
Warpling

2
Ні, вони цього не роблять. Просто використовуйте його з методом openURL:.
Михайло

1
Я намагаюся використовувати це для посилання на налаштування з веб-сторінки, і, схоже, це працює в Safari на iPhone, але не iPad. Обидва вони працюють на версії 9.0.2. Серйозно, Apple?
Ренді Х.

3
Ще потрібно додати преф-схему URL-адреси до цільової
shim

7

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

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

Переконайтеся, що prefsспочатку визначено схему URL-адрес.


Це тому, що меню Bluetooth було переміщено в останніх версіях iOS. Зараз це налаштування верхнього рівня, а не загальне .
Нейт

@Imran: Ви забули prefs-матеріал.
Michael Dorner

5

Рішення для iOS10. Працює нормально.

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

Це законно? Успішне подання програми не означає, що це законно. З часом це може зазнати краху ..
Стас,

@Stas: Ні, це не так, оскільки це приватний API.
Tejas K

4

Станом на iOS10 ви можете використовувати

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

щоб відкрити загальні налаштування.

також ви можете додати відомі URL-адреси (ви можете побачити їх у найбільш прихильній відповіді) до нього, щоб відкрити певні налаштування. Наприклад, нижче відкривається сенсорний ідентифікатор та пароль.

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

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, але не блокувальники вмісту. Якщо ваш додаток міжнародний, будьте обережні.
    Оновлення: Не знаю чому, зараз я більше не можу переходити до 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 Що ви маєте на увазі під "такою ганьбою"?
Kaiyuan Xu

Те, що це дуже прикро, було б чудово перейти безпосередньо до налаштувань блокування вмісту Safari
Райан Броді

6
@RyanBrodie Навіть якщо це може працювати, я пропоную вам не використовувати його зараз для App Store Apps, я щойно отримав "відхилення" від iTunes Connect сьогодні вранці, оскільки "prefs: root" - це приватний API (є додатки з використанням преф: root в App Store ... Бог знає чому)
Kaiyuan Xu

Я не усвідомлював цього великого спасибі за підняті голови!
Райан Броді

2

Відмінно працює для налаштувань сповіщень додатків на IOS 10 (перевірено)

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


0

Я оновлюю тут одну новину. Використання лише «prefs:» НЕ відхиляється Apple, я перевірив його та перевірив схвалення в магазині програм (у серпні 2016 р.). Дякую.


я використовую це [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=DO_NOT_DISTURB"]];для відкритого налаштування DND пристрою. Apple відхилить це?
Шреянк

Якщо він лише пройшов огляд або він також працює? Я маю на увазі, чи відкриває openURL вас до налаштувань? На моєму боці це не спрацювало.
Ahmet Akkök
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.