iOS-Starteinstellungen -> Einschränkungen URL-Schema

87

Ich habe kürzlich das fantastische URL-Schema für benutzerdefinierte iOS5-Einstellungen entdeckt , das auf dieser großartigen Website ausführlich erläutert werden kann .

Ich habe festgestellt, dass dies funktioniert und den Benutzer von meiner Anwendung aus zur App "Einstellungen" geleitet hat:

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

Es kann jedoch nicht scheinen, über den Parameter direkt zum Pfad " Einschränkungen" zu routen path:

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

Hat jemand eine Dokumentation dazu gefunden oder konnte dies funktionieren?

Jeder Einblick wäre sehr dankbar. Ich versuche, den Benutzer dazu zu bringen, den In-App-Kauf zu aktivieren, und möchte den Benutzer lieber nicht manuell auf Einschränkungen klicken lassen (nicht sehr offensichtlich).

kturner
quelle
2
kennt jemand die URL für Touch ID & Passcode?
Fabian Köbel
1
Verwenden Sie dies für die Touch-ID: prefs: root = TOUCHID_PASSCODE ( stackoverflow.com/questions/35410746/… )
Fabian Köbel

Antworten:

143

AS @Nix Wangs ANTWORT DIESES FUNKTIONIERT NICHT IN IOS 10


WARNUNG: Diese Methode funktioniert nicht für Geräte mit iOS 5.1 und höher - siehe Hlung's Kommentar unten.

Es ist möglich, dass die pathKomponente einen anderen Namen als der eigentliche Abschnitt hat, aber es ist auch möglich, dass Sie derzeit nicht direkt über eine URL auf diesen Abschnitt zugreifen können. Ich habe eine Liste möglicher URLs gefunden und Einschränkungen sind nicht darauf, vielleicht ist sie nur noch nicht herausgefunden worden.

Liste der aktuell bekannten URLs in der Einstellungen-App:

  • Einstellungen: root = Allgemein & Pfad = Info
  • Einstellungen: root = Allgemein & Pfad = ZUGÄNGLICHKEIT
  • Einstellungen: root = AIRPLANE_MODE
  • Einstellungen: root = General & path = AUTOLOCK
  • Einstellungen: root = General & path = USAGE / CELLULAR_USAGE
  • Einstellungen: root = Helligkeit
  • Einstellungen: root = Allgemein & Pfad = Bluetooth
  • Einstellungen: root = General & path = DATE_AND_TIME
  • Einstellungen: root = FACETIME
  • Einstellungen: root = Allgemein
  • Einstellungen: root = Allgemein & Pfad = Tastatur
  • Einstellungen: root = CASTLE
  • Einstellungen: root = CASTLE & path = STORAGE_AND_BACKUP
  • Einstellungen: root = General & path = INTERNATIONAL
  • Einstellungen: root = LOCATION_SERVICES
  • Einstellungen: root = ACCOUNT_SETTINGS
  • Einstellungen: root = MUSIC
  • Einstellungen: root = MUSIC & path = EQ
  • Einstellungen: root = MUSIC & path = VolumeLimit
  • Einstellungen: root = Allgemein & Pfad = Netzwerk
  • Einstellungen: root = NIKE_PLUS_IPOD
  • Einstellungen: root = NOTES
  • Einstellungen: root = NOTIFICATIONS_ID
  • Einstellungen: root = Telefon
  • Einstellungen: root = Fotos
  • Einstellungen: root = General & path = ManagedConfigurationList
  • Einstellungen: root = Allgemein & Pfad = Zurücksetzen
  • Einstellungen: root = Sounds & path = Klingelton
  • Einstellungen: root = Safari
  • Einstellungen: root = Allgemein & Pfad = Assistent
  • Einstellungen: root = Sounds
  • Einstellungen: root = General & path = SOFTWARE_UPDATE_LINK
  • Einstellungen: root = STORE
  • Einstellungen: root = TWITTER
  • Einstellungen: root = General & path = USAGE
  • Einstellungen: root = VIDEO
  • Einstellungen: root = Allgemein & Pfad = Netzwerk / VPN
  • Einstellungen: root = Wallpaper
  • Einstellungen: root = WIFI
  • Einstellungen: root = INTERNET_TETHERING
Henri Normak
quelle
54
Nur eine nette Warnung, idownloadblog.com/2011/11/29/iphone-5-1-disables-shortcuts sagte, dass alle URL-Schemata zu iOS-Einstellungen in iOS5.1 entfernt werden (also URLs wie Einstellungen: root = General & path = Network wird nicht mehr funktionieren) Also bitte beachten.
Hlung
3
Sie werden nicht vollständig entfernt. Sie müssen nur diese URL-Links in eine Schaltfläche in einer UIAlertView einfügen. Fügen Sie einfach eine Warnung in die UIAlertView ein, dass die App in den Hintergrund wechselt und die Einstellungen geöffnet werden und dann OK und Abbrechen usw.
zambono
4
Es funktioniert nicht mehr, es hat vor einiger Zeit an einer meiner Apps funktioniert, aber nicht mehr.
Zambono
5
Ab iOS8 können Sie die integrierte Einstellungen-App mit folgender URL starten:[NSURL URLWithString:UIApplicationOpenSettingsURLString]
Jason Moore
2
Jede Lösung / Alternative für ios10 bitte.
ranjit.x.singh
47

Ab iOS8 können Sie die integrierte Einstellungen-App öffnen mit:

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

Die tatsächliche URL-Zeichenfolge lautet @"app-settings:". Ich habe versucht, verschiedene Abschnitte an die Zeichenfolge anzuhängen ("Bluetooth", "ALLGEMEIN" usw.), aber anscheinend funktioniert nur die Verknüpfung mit dem Hauptbildschirm "Einstellungen". Schreiben Sie eine Antwort, wenn Sie etwas anderes herausfinden.

Jason Moore
quelle
10
Dies liegt daran, dass dieser bestimmte Aufruf die URL zum Starten der Einstellungen ist. Es öffnet die benutzerdefinierten Einstellungen der App, falls vorhanden. Wenn nicht, wird nur die App Einstellungen zum Hauptbildschirm geöffnet. developer.apple.com/library/ios/documentation/UIKit/Reference/…
JAL
1
Fantastische Antwort, wenn Ihre App bestimmte Einstellungen hat, die aktiviert / deaktiviert werden sollen. Alles an einem Ort und Sie müssen den Benutzer nicht durch die Einstellungen navigieren, um zur gewünschten Konfiguration zu gelangen. Vielen Dank!
Kyleturner
1
@ FabianKöbel konnten Sie eine für TouchID & Passcode finden?
ShayanK
1
@AspersionCast: Sie können dies verwenden: prefs: root = TOUCHID_PASSCODE ( stackoverflow.com/questions/35410746/… )
Fabian Köbel
Dies scheint die einzige derzeit von Apple genehmigte Methode zum Starten der Einstellungen-App zu sein.
u2Fan
42

Wenn Sie Ihrer iOS-App das URL-Schema "Einstellungen" hinzufügen, können Sie alle Schemata verwenden, die wir in iOS 5 verwenden konnten. Ich habe es unter iOS 9 getestet, aber ich denke, es funktioniert auch mit älteren Versionen.

Pedro Tôrres
quelle
Dieser Trick funktioniert nur ab iOS 8, wenn dies nicht erforderlich ist.
Valeriy Van
1
Aber auch in iOS 8 dürfen Sie die WLAN-Einstellungen nicht öffnen, wenn Sie diese URL beispielsweise nicht zu Ihrer Anwendung hinzufügen.
Pedro Tôrres
Ja, du hast recht. Ich habe nicht über diesen Anwendungsfall nachgedacht.
Valeriy Van
9
@conorgriffin Für Sie und alle anderen, die sich fragen, lebt die Einstellung unter: Ziele | (Antrag) | Info | URL-Typen | +
Kevin Sylvestre
Jemand sagte, er sei abgelehnt worden, weil er die URL "prefs: root" verwendet habe. stackoverflow.com/questions/8246070/…
Hlung
33

Aktualisieren:

prefs: funktioniert NICHT seit iOS 10.

Nix Wang
quelle
4
Was ist die Alternative?
OXXY
1
Das ist verrückt, da dieses offizielle Apple Doc ( developer.apple.com/library/ios/qa/qa1924/_index.html ) absichtlich das Problem mit den Einstellungen behandelt und vom 02.08.2016 datiert.
Daspianist
1
Dieses Dokument sagt nur, es für Tastatureinstellungen zu verwenden (alles andere als diese spezifische Verwendung ist eine Verletzung.)
Peter Johnson
Leider scheint es nicht einmal für Tastatureinstellungen in iOS 10 zu funktionieren.
Komplikationen
4
Während es prefs:nicht mehr funktioniert, funktioniert Folgendes (zumindest in der Eröffnungsrede):App-Prefs::root=Settings&path=General
Daspianist
22

Ja, habe dies (und viele mehr) gesehen und es sogar in einer Testanwendung implementiert. Ich muss wirklich das endgültige Wort von Apple erhalten, aber die Meinung des Community-Konsenses ist, dass Apple es in 5.1 nicht zugelassen hat, nachdem es öffentlich "entdeckt / veröffentlicht" wurde, sodass Bewerbungen, die es enthalten, nicht akzeptiert werden.

08/01/12 Update: Apple wurde über mein Entwicklerkonto gefragt, ob es eine Möglichkeit gibt, das Dialogfeld "WLAN-Einstellungen" programmgesteuert zu starten. Hier ist die Antwort:

"Unsere Ingenieure haben Ihre Anfrage geprüft und sind zu dem Schluss gekommen, dass es angesichts der derzeit ausgelieferten Systemkonfigurationen keine unterstützte Möglichkeit gibt, die gewünschte Funktionalität zu erreichen."

Dan
quelle
9
Ich empfehle jedem, der diese Funktion benötigt, um einen offiziellen Fehlerbericht zu protokollieren. Je mehr darüber berichtet wird, desto sichtbarer wird es und desto besser ist die Chance, dass in Zukunft eine unterstützte Lösung vorgestellt wird. bugreport.apple.com
Matt Connolly
18

In iOS 9 funktioniert es wieder!

Um Einstellungen> Allgemein> Tastatur zu öffnen , verwende ich:

prefs:root=General&path=Keyboard

Darüber hinaus ist es möglich, weiter zu Tastaturen zu gehen :

prefs:root=General&path=Keyboard/KEYBOARDS
Mikhail
quelle
Ich habe das gerade in der PopKey-App bemerkt. Ich habe die URL für Einstellungen> Wi-Fi-Einstellungen ausprobiert und sie funktioniert auch. Hoffen wir, dass dies so bleibt.
Jamie McDaniel
Sind diese Regelungen zu hinzugefügt werden müssen , LSApplicationQueriesSchemesin info.plist?
Warpling
2
Nein, das tun sie nicht. Verwenden Sie einfach die Methode openURL:.
Mikhail
1
Ich versuche, dies zu verwenden, um auf Einstellungen von einer Webseite zu verlinken, und es scheint in Safari auf einem iPhone, aber nicht auf einem iPad zu funktionieren. Beide sind am 9.0.2. Im Ernst, Apple?
Randy H.
3
Wird immer noch benötigt, um dem Ziel ein bevorzugtes URL-Schema hinzuzufügen
Shim
7

Ich wollte das Bluetooth-Menü in der Einstellungsanwendung öffnen und der obige Pfad (Einstellungen: root = Allgemein & Pfad = Bluetooth) funktionierte bei mir nicht. Was am Ende für mich gearbeitet hat, war

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

Stellen Sie sicher, dass Sie zuerst das prefsURL-Schema definiert haben.

Mahesh
quelle
Dies liegt daran, dass das Bluetooth-Menü in den letzten iOS-Versionen verschoben wurde. Es ist jetzt eine Einstellung der obersten Ebene, nicht unter Allgemein .
Nate
@ Imran: Du hast das prefsZeug vergessen .
Michael Dorner
5

Lösung für iOS10. Funktioniert gut.

NSURL *URL = [NSURL URLWithString:@"App-prefs:root=TWITTER"];
[[UIApplication sharedApplication] openURL:URL options:@{} completionHandler:nil];
pararmswar Entwickler
quelle
Ist das legitim? Erfolgreiche App-Einreichung bedeutet nicht, dass dies legitim ist. Es kann irgendwann in der Zukunft scheitern ..
Stas
@Stas: Nein, das ist es nicht, da es sich um eine private API handelt.
Tejas K
4

Ab iOS10 können Sie verwenden

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

um allgemeine Einstellungen zu öffnen.

Sie können auch bekannte URLs hinzufügen (Sie können sie in der am besten bewerteten Antwort sehen), um bestimmte Einstellungen zu öffnen. Zum Beispiel öffnet die folgende TouchID und den Passcode.

UIApplication.sharedApplication().openURL(NSURL(string:"App-Prefs:root=TOUCHID_PASSCODE")!)
mkeremkeskin
quelle
1
"App-Prefs: root = TOUCHID_PASSCODE" funktioniert unter iOS 11 nicht. Gibt es eine andere Lösung?
Myaug
App-Prefsist eine private API, die während der Überprüfung zur Ablehnung der App führt.
Tejas K
2

Hier ist noch etwas, was ich gefunden habe:

  1. Nachdem ich das URL-Schema "prefs" definiert habe, funktioniert "prefs: root = Safari & path = ContentBlockers" in Simulator (iOS 9.1 Englisch ), aber nicht in Simulator (vereinfachtes Chinesisch) . Es springt nur zu Safari, aber nicht zu Content Blockern. Wenn Ihre App international ist, seien Sie vorsichtig.
    Update: Ich weiß nicht warum, jetzt kann ich nicht mehr in ContentBlocker springen, der gleiche Code, die gleiche Version, funktioniert jetzt nicht mehr. :(

  2. Auf echten Geräten (meins ist iPhone 6S & iPad mini 2) sollte "Safari" "SAFARI" sein , "Safari" funktioniert nicht auf einem echten Gerät, "SAFARI" funktioniert jetzt auf einem Simulator:

    #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. Bisher wurden keine Unterschiede zwischen iPhone und iPad festgestellt.

Kaiyuan Xu
quelle
Hast du das jemals wieder zum Laufen gebracht? So eine Schande, wenn nicht!
Ryan Brodie
@ RyanBrodie Was meinst du mit "so eine Schande"?
Kaiyuan Xu
Dass es sehr unglücklich ist, wäre großartig, direkt in die Content Blocker-Einstellungen von Safari zu verlinken
Ryan Brodie
6
@RyanBrodie Auch wenn es funktionieren könnte, schlage ich vor, dass Sie es derzeit nicht für App Store-Apps verwenden. Ich habe heute Morgen von iTunes Connect eine "Ablehnung" erhalten, da "prefs: root" eine private API ist (es gibt Apps) mit prefs: root im App Store ... Gott weiß warum)
Kaiyuan Xu
Ich habe das nicht bemerkt. Vielen Dank für das Heads-up!
Ryan Brodie
2

Funktioniert gut für App-Benachrichtigungseinstellungen unter IOS 10 (getestet)

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

iOS 10

Verwenden app-prefs:

App-prefs:root=MOBILE_DATA_SETTINGS_ID

Siehe Kern

Alex Hedley
quelle
0

Ich aktualisiere hier eine Nachricht. Die Verwendung von "Prefs:" wird von Apple NICHT abgelehnt. Ich habe es getestet und im App Store genehmigt (im August 2016). Vielen Dank.

KoreanXcodeWorker
quelle
Ich benutze dies [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=DO_NOT_DISTURB"]];für offene DND-Einstellung des Geräts. Apple wird dies ablehnen?
Shreyank
Hatte es nur die Bewertung bestanden oder funktioniert es auch? Ich meine, bringt dich die openURL zu den Einstellungen? Auf meiner Seite hat es nicht funktioniert.
Ahmet Akkök