Ustawienia uruchamiania iOS -> Schemat adresu URL ograniczeń

86

Niedawno odkryłem niesamowity schemat adresu URL ustawień niestandardowych iOS5 , który można szczegółowo wyjaśnić na tej wspaniałej stronie internetowej .

Przekonałem się, że to działa, kierując użytkownika do aplikacji Ustawienia z mojej aplikacji:

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

Ale wydaje się, że nie można kierować bezpośrednio do ścieżki ograniczeń za pomocą pathparametru:

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

Czy ktoś znalazł dokumentację na ten temat lub był w stanie to naprawić?

Każdy wgląd byłby bardzo mile widziany. Próbuję skłonić użytkownika do włączenia zakupów w aplikacji i wolę, aby użytkownik nie klikał ręcznie ograniczeń (niezbyt oczywiste).

kturner
źródło
2
czy ktoś zna adres URL dla Touch ID i kodu dostępu?
Fabian Köbel,
1
użyj tego dla Touch id: prefs: root = TOUCHID_PASSCODE ( stackoverflow.com/questions/35410746/ ... )
Fabian Köbel

Odpowiedzi:

144

JAK: ODPOWIEDŹ @Nix Wang TO NIE DZIAŁA W IOS 10


OSTRZEŻENIE: ta metoda nie będzie działać na urządzeniach z systemem iOS 5.1 i nowszym - zobacz komentarz Hlung poniżej.

Możliwe, że pathkomponent ma inną nazwę niż rzeczywista sekcja, ale możliwe jest również, że obecnie nie możesz uzyskać dostępu do tej sekcji bezpośrednio z adresu URL. Znalazłem listę możliwych adresów URL i nie ma na niej ograniczeń, może po prostu jeszcze się nie dowiedziała.

Lista obecnie znanych adresów URL w aplikacji Ustawienia:

  • prefs: root = Ogólne & path = Informacje
  • prefs: root = Ogólne & path = DOSTĘPNOŚĆ
  • prefs: root = TRYB_PLANU SAMOLOTU
  • prefs: root = Ogólne & path = AUTOLOCK
  • prefs: root = General & path = USAGE / CELLULAR_USAGE
  • prefs: root = Jasność
  • prefs: root = Ogólne & path = Bluetooth
  • prefs: root = General & path = DATE_AND_TIME
  • prefs: root = FACETIME
  • prefs: root = General
  • prefs: root = Ogólne & path = Klawiatura
  • prefs: root = ZAMEK
  • prefs: root = ZAMEK & path = STORAGE_AND_BACKUP
  • prefs: root = Ogólne & path = INTERNATIONAL
  • prefs: root = LOCATION_SERVICES
  • prefs: root = ACCOUNT_SETTINGS
  • prefs: root = MUZYKA
  • prefs: root = MUZYKA i ścieżka = EQ
  • prefs: root = MUZYKA & path = VolumeLimit
  • prefs: root = Ogólne & path = Sieć
  • prefs: root = NIKE_PLUS_IPOD
  • prefs: root = UWAGI
  • prefs: root = NOTIFICATIONS_ID
  • prefs: root = Phone
  • prefs: root = Zdjęcia
  • prefs: root = General & path = ManagedConfigurationList
  • prefs: root = Ogólne & path = Resetuj
  • prefs: root = Dźwięki & path = Dzwonek
  • prefs: root = Safari
  • prefs: root = Ogólne & path = Asystent
  • prefs: root = Dźwięki
  • prefs: root = General & path = SOFTWARE_UPDATE_LINK
  • prefs: root = STORE
  • prefs: root = TWITTER
  • prefs: root = General & path = USAGE
  • prefs: root = VIDEO
  • prefs: root = Ogólne & path = Sieć / VPN
  • prefs: root = Wallpaper
  • prefs: root = WIFI
  • prefs: root = INTERNET_TETHERING
Henri Normak
źródło
54
Tylko miłe ostrzeżenie, idownloadblog.com/2011/11/29/iphone-5-1-disables-shortcuts powiedział, że wszystkie schematy adresów URL do ustawień iOS zostaną usunięte w iOS5.1 (więc adresy takie jak prefs: root = General & path = Network nie będzie już działać) Więc proszę o świadomość.
Hlung
3
Nie są one całkowicie usuwane, wystarczy umieścić te łącza URL w przycisku w UIAlertView. Więc po prostu umieść ostrzeżenie w UIAlertView, że aplikacja przejdzie w tło i ustawienia zostaną otwarte, a następnie OK i Anuluj itp.
zambono
4
To już nie działa, działało na jednej z moich aplikacji jakiś czas temu, ale już nie.
zambono
5
Od iOS8 możesz uruchomić wbudowaną aplikację Ustawienia z adresem URL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]
Jason Moore
2
Jakiekolwiek rozwiązanie / alternatywa dla ios10 proszę.
ranjit.x.singh
48

Od iOS8 możesz otworzyć wbudowaną aplikację Ustawienia za pomocą:

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

Rzeczywisty ciąg adresu URL to @"app-settings:". Próbowałem dołączyć różne sekcje do ciągu („Bluetooth”, „OGÓLNE” itp.), Ale wydaje się, że działa tylko link do głównego ekranu ustawień. Opublikuj odpowiedź, jeśli dowiesz się inaczej.

Jason Moore
źródło
10
Dzieje się tak, ponieważ to konkretne wywołanie to URL uruchamiania ustawień. Otwiera niestandardowe ustawienia aplikacji, jeśli istnieją. Jeśli nie, po prostu otwiera aplikację Ustawienia na głównym ekranie. developer.apple.com/library/ios/documentation/UIKit/Reference/…
JAL
1
Fantastyczna odpowiedź, jeśli Twoja aplikacja ma określone ustawienia, które chcesz włączyć / wyłączyć. Wszystko w jednym miejscu i nie musisz nawigować użytkownika przez Ustawienia, aby uzyskać żądaną konfigurację. Dzięki!
kyleturner
1
@ FabianKöbel czy udało Ci się znaleźć taki dla TouchID i kodu dostępu?
ShayanK
1
@AspersionCast: możesz użyć tego: prefs: root = TOUCHID_PASSCODE ( stackoverflow.com/questions/35410746/… )
Fabian Köbel
Wygląda na to, że jest to jedyna obecnie zatwierdzona przez Apple metoda uruchamiania aplikacji Ustawienia.
u2Fan
42

Jeśli dodasz schemat adresu URL prefs do swojej aplikacji na iOS, pozwoli ci to na użycie wszystkich tych schematów, które mogliśmy w iOS 5. Testowałem go na iOS 9, ale myślę, że będzie działać również na starszych wersjach.

Pedro Tôrres
źródło
Ta sztuczka działa tylko przy uruchamianiu iOS 8 tam, gdzie nie ma takiej potrzeby.
Valeriy Van
1
Ale tak samo w iOS 8 nie możesz otwierać ustawień WiFi, na przykład, jeśli nie dodasz tego adresu URL do swojej aplikacji.
Pedro Tôrres,
Tak masz rację. Nie myślałem o tym przypadku użycia.
Valeriy Van
9
@conorgriffin Dla Ciebie i każdego, kto zastanawia się nad tym ustawieniem, znajduje się pod adresem: Cele | (Aplikacja) | Informacje | Typy adresów URL | +
Kevin Sylvestre
Ktoś powiedział, że został odrzucony za użycie adresu URL „prefs: root”. stackoverflow.com/questions/8246070/…
Hlung
33

Aktualizacja:

prefs: NIE będzie działać od iOS 10.

Nix Wang
źródło
4
Jaka jest alternatywa?
OXXY
1
To szalone, ponieważ ten oficjalny dokument Apple ( developer.apple.com/library/ios/qa/qa1924/_index.html ) celowo adresuje problem z prefs i datowany na 8 lutego 2016 r.
daspianist
1
Ten dokument mówi, że należy używać go tylko do ustawień klawiatury (wszystko inne niż to konkretne użycie jest naruszeniem).
Peter Johnson
Niestety wydaje się, że nie działa nawet dla ustawień klawiatury w iOS 10.
Intrications
4
Chociaż prefs:już nie działa, działa (przynajmniej na App-Prefs::root=Settings&path=General
wstępie
22

Tak, widziałem to (i wiele więcej), nawet zaimplementowałem to w aplikacji testowej. Naprawdę potrzebuję uzyskać ostateczne słowo od Apple, ale konsensus społeczności jest taki, że Apple zabronił tego w wersji 5.1 po tym, jak zostało publicznie „odkryte / opublikowane”, więc wnioski zawierające je nie zostaną zaakceptowane.

Aktualizacja 08/01/12: Zapytałem Apple za pośrednictwem mojego konta programisty, czy istnieje sposób na programowe uruchomienie okna dialogowego Ustawienia WiFi. Oto odpowiedź:

„Nasi inżynierowie przeanalizowali Twoją prośbę i doszli do wniosku, że nie ma obsługiwanego sposobu na osiągnięcie pożądanej funkcjonalności, biorąc pod uwagę obecne konfiguracje systemu dostawy”.

Dan
źródło
9
Polecam każdemu, kto potrzebuje tej funkcji, aby zarejestrował oficjalny raport o błędzie. Im więcej zostanie zgłoszonych, tym bardziej będzie to widoczne i tym większa szansa, że ​​obsługiwane rozwiązanie zostanie zaprezentowane w przyszłości. bugreport.apple.com
Matt Connolly
18

W iOS 9 znów działa!

Aby otworzyć Ustawienia> Ogólne> Klawiatura , używam:

prefs:root=General&path=Keyboard

Co więcej, można przejść dalej do klawiatur :

prefs:root=General&path=Keyboard/KEYBOARDS
Michaił
źródło
Właśnie zauważyłem to w aplikacji PopKey. Wypróbowałem adres URL dla Ustawienia> Ustawienia Wi-Fi i również działa. Miejmy nadzieję, że to pozostanie.
Jamie McDaniel
Czy te schematy muszą być dodane LSApplicationQueriesSchemesw info.plist?
Warpling,
2
Nie, nie robią. Po prostu użyj jej z openURL: metoda.
Michaił
1
Próbuję użyć tego, aby połączyć się z ustawieniami ze strony internetowej i wygląda na to, że działa w Safari na iPhonie, ale nie na iPadzie. Oba są w wersji 9.0.2. Poważnie, Apple?
Randy H.
3
Nadal konieczne jest dodanie schematu adresu URL prefs do celu
shim
7

Chciałem otworzyć menu Bluetooth w aplikacji Ustawienia, a powyższa ścieżka (prefs: root = General & path = Bluetooth) nie działa dla mnie. To, co skończyło się dla mnie pracą, to

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

Upewnij się, że masz prefszdefiniowany schemat adresu URL.

Mahesh
źródło
Dzieje się tak, ponieważ menu Bluetooth zostało przeniesione w ostatnich wersjach iOS. Jest to teraz ustawienie najwyższego poziomu, a nie Ogólne .
Nate
@Imran: Zapomniałeś o prefsrzeczy.
Michael Dorner
5

Rozwiązanie dla iOS10. Działa w porządku.

NSURL *URL = [NSURL URLWithString:@"App-prefs:root=TWITTER"];
[[UIApplication sharedApplication] openURL:URL options:@{} completionHandler:nil];
Pararmswar Developers
źródło
Czy to jest zgodne z prawem? Pomyślne przesłanie aplikacji nie oznacza, że ​​jest to legalne. W przyszłości może się to nie udać ..
Stas
@Stas: Nie, nie jest, ponieważ jest to prywatny interfejs API.
Tejas K,
4

Od iOS10 możesz używać

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

aby otworzyć ustawienia ogólne.

możesz również dodać znane adresy URL (możesz je zobaczyć w najczęściej ocenianej odpowiedzi), aby otworzyć określone ustawienia. Na przykład poniższy otwiera touchID i hasło.

UIApplication.sharedApplication().openURL(NSURL(string:"App-Prefs:root=TOUCHID_PASSCODE")!)
mkeremkeskin
źródło
1
„App-Prefs: root = TOUCHID_PASSCODE” nie działa na iOS 11. Jakieś inne rozwiązanie?
myaug
App-Prefsto prywatny interfejs API, który prowadzi do odrzucenia aplikacji podczas sprawdzania.
Tejas K,
2

Oto coś, co znalazłem:

  1. Po zdefiniowaniu schematu adresu URL „prefs”, „prefs: root = Safari & path = ContentBlockers” działa w symulatorze (wersja angielska iOS 9.1 ), ale nie działa w symulatorze (chiński uproszczony) . Po prostu przeskakuje do Safari, ale nie do blokowania treści. Jeśli Twoja aplikacja jest międzynarodowa, zachowaj ostrożność.
    Aktualizacja: Nie wiem dlaczego, teraz nie mogę już przeskoczyć do ContentBlockers, ten sam kod, ta sama wersja, teraz nie działa. :(

  2. Na prawdziwych urządzeniach (mój to iPhone 6S i iPad mini 2), „Safari” powinno być „SAFARI” , „Safari” nie działa na prawdziwym urządzeniu, „SAFARI” teraz działa na symulatorze:

    #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. Jak dotąd nie znalazłem żadnych różnic między iPhonem a iPadem.

Kaiyuan Xu
źródło
Czy kiedykolwiek sprawiłeś, że to znowu zadziałało? Szkoda, jeśli nie!
Ryan Brodie
@RyanBrodie Co masz na myśli mówiąc „taki wstyd”?
Kaiyuan Xu
To bardzo niefortunne, byłoby wspaniale połączyć się bezpośrednio z ustawieniami blokowania treści Safari
Ryan Brodie,
6
@RyanBrodie Nawet jeśli to może zadziałać, sugeruję, abyś nie używał go teraz w aplikacjach App Store. Właśnie dostałem „odrzucone” z iTunes Connect dziś rano, ponieważ „prefs: root” to prywatny interfejs API (są aplikacje używając prefs: root w App Store ... Bóg wie dlaczego)
Kaiyuan Xu
Nie zdawałem sobie sprawy, że bardzo dziękuję za ostrzeżenie!
Ryan Brodie
2

Działa dobrze w przypadku ustawień powiadomień aplikacji na IOS 10 (przetestowane)

if(&UIApplicationOpenSettingsURLString != nil){
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
}
Mrsantateam
źródło
2

iOS 10

Posługiwać się app-prefs:

App-prefs:root=MOBILE_DATA_SETTINGS_ID

Zobacz sedno

Alex Hedley
źródło
0

Aktualizuję tutaj jedną wiadomość. Używanie tylko „prefs:” NIE jest odrzucane przez Apple, przetestowałem go i sprawdziłem, czy jest zatwierdzony w sklepie z aplikacjami (w sierpniu 2016 r.). dzięki.

KoreanXcodeWorker
źródło
Używam tego [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=DO_NOT_DISTURB"]];do otwartego ustawienia DND urządzenia. Apple to odrzuci?
Shreyank
Czy tylko przeszedł test, czy też działa? Chodzi mi o to, czy openURL prowadzi do ustawień? Po mojej stronie to nie zadziałało.
Ahmet Akkök