Impostazioni di avvio di iOS -> Schema URL restrizioni


86

Di recente ho scoperto il fantastico schema URL delle impostazioni personalizzate di iOS5 , che può essere spiegato in dettaglio in questo fantastico sito web .

Ho scoperto che funziona, indirizzando l'utente all'app Impostazioni dalla mia applicazione:

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

Ma non sembra che si instradi direttamente al percorso delle restrizioni tramite il pathparametro:

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

Qualcuno ha trovato documentazione su questo o è stato in grado di farlo funzionare?

Qualsiasi intuizione sarebbe molto apprezzata. Sto cercando di convincere l'utente ad abilitare gli acquisti in-app e preferirei che l'utente non facesse clic manualmente su Restrizioni (non molto ovvio).


2
qualcuno conosce l'URL per Touch ID e passcode?
Fabian Köbel

1
utilizzare questo per touch ID: prefs: root = TOUCHID_PASSCODE ( stackoverflow.com/questions/35410746/... )
Fabian Köbel

Risposte:


144

COME LA RISPOSTA DI @Nix Wang NON FUNZIONA IN IOS 10


ATTENZIONE: questo metodo non funzionerà per i dispositivi con iOS 5.1 e versioni successive - Vedi il commento di Hlung di seguito.

È possibile che il pathcomponente abbia un nome diverso rispetto alla sezione effettiva, ma è anche possibile che al momento non sia possibile accedere a quella sezione direttamente da un URL. Ho trovato un elenco di possibili URL e restrizioni non è presente, forse non è ancora stato scoperto.

Elenco degli URL attualmente conosciuti nell'app Impostazioni:

  • prefs: root = Generale e percorso = Informazioni
  • prefs: root = Generale e percorso = ACCESSIBILITÀ
  • prefs: root = AIRPLANE_MODE
  • prefs: root = Generale e percorso = AUTOLOCK
  • prefs: root = Generale e percorso = USAGE / CELLULAR_USAGE
  • prefs: root = Luminosità
  • prefs: root = Generale e percorso = Bluetooth
  • prefs: root = Generale e percorso = DATE_AND_TIME
  • prefs: root = FACETIME
  • prefs: root = Generale
  • prefs: root = Generale e percorso = Tastiera
  • prefs: root = CASTLE
  • prefs: root = CASTLE & path = STORAGE_AND_BACKUP
  • prefs: root = Generale e percorso = INTERNAZIONALE
  • prefs: root = LOCATION_SERVICES
  • prefs: root = ACCOUNT_SETTINGS
  • prefs: root = MUSIC
  • prefs: root = MUSIC & path = EQ
  • prefs: root = MUSIC & path = VolumeLimit
  • prefs: root = Generale e percorso = Rete
  • prefs: root = NIKE_PLUS_IPOD
  • prefs: root = NOTE
  • prefs: root = NOTIFICATIONS_ID
  • prefs: root = Telefono
  • prefs: root = Foto
  • prefs: root = General & path = ManagedConfigurationList
  • prefs: root = Generale e percorso = Ripristina
  • prefs: root = Sounds & path = Ringtone
  • prefs: root = Safari
  • prefs: root = Generale e percorso = Assistente
  • prefs: root = Suoni
  • prefs: root = Generale e percorso = SOFTWARE_UPDATE_LINK
  • prefs: root = STORE
  • prefs: root = TWITTER
  • prefs: root = Generale e percorso = USAGE
  • prefs: root = VIDEO
  • prefs: root = Generale e percorso = Rete / VPN
  • prefs: root = Sfondo
  • prefs: root = WIFI
  • prefs: root = INTERNET_TETHERING

54
Solo un gentile avvertimento, idownloadblog.com/2011/11/29/iphone-5-1-disables-shortcuts ha detto che tutti gli schemi URL per le impostazioni iOS verranno rimossi in iOS5.1 (quindi gli URL come prefs: root = General & path = Network non funzionerà più) Quindi, tieni presente.
Hlung

3
Non vengono completamente rimossi, devi solo inserire questi collegamenti URL in un pulsante in un UIAlertView. Quindi metti semplicemente un avviso in UIAlertView che l'app andrà in background e le impostazioni si apriranno, quindi OK, e Annulla ecc.
zambono

4
Non funziona più, qualche tempo fa funzionava su una delle mie app ma non più.
zambono

5
A partire da iOS8 puoi avviare l'app Impostazioni incorporata con l'URL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]
Jason Moore,

2
Qualsiasi soluzione / alternativa per ios10 per favore.
ranjit.x.singh

48

A partire da iOS8 puoi aprire l'app Impostazioni incorporata con:

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

La stringa dell'URL effettiva è @"app-settings:". Ho provato ad aggiungere diverse sezioni alla stringa ("Bluetooth", "GENERALE", ecc.) Ma sembra che il collegamento alla schermata principale delle Impostazioni funzioni. Pubblica una risposta se scopri il contrario.


10
Questo perché quella particolare chiamata è l'URL di avvio delle impostazioni. Apre le impostazioni personalizzate dell'app, se esistono. In caso contrario, apre semplicemente l'app Impostazioni nella schermata principale. developer.apple.com/library/ios/documentation/UIKit/Reference/…
JAL

1
Risposta fantastica se la tua app ha impostazioni specifiche che desideri abilitare / disabilitare. Tutto in un unico posto e non è necessario navigare l'utente attraverso Impostazioni per arrivare alla configurazione desiderata. Grazie!
kyleturner

1
@ FabianKöbel sei riuscito a trovarne uno per TouchID e passcode?
ShayanK

1
@AspersionCast: è possibile utilizzare questo: prefs: root = TOUCHID_PASSCODE ( stackoverflow.com/questions/35410746/... )
Fabian Köbel

Questo sembra essere l'unico metodo attualmente approvato da Apple per avviare l'app Impostazioni.
u2Fan

42

Se aggiungi lo schema URL prefs alla tua app iOS, ti consentirà di utilizzare tutti gli schemi che potremmo utilizzare in iOS 5. L'ho testato su iOS 9, ma penso che funzionerà anche su versioni precedenti.


Questo trucco funziona solo a partire da iOS 8 dove non è necessario.
Valeriy Van

1
Ma lo stesso in iOS 8 non ti è permesso aprire le impostazioni WiFi, ad esempio, se non aggiungi questo URL vergogna alla tua applicazione.
Pedro Tôrres

Si hai ragione. Non ho pensato a questo caso d'uso.
Valeriy Van

9
@conorgriffin Per te e per chiunque altro si chieda l'ambientazione vive sotto: Targets | (Applicazione) | Info | Tipi di URL | +
Kevin Sylvestre

Qualcuno ha detto di essere stato rifiutato per aver utilizzato l'URL "prefs: root". stackoverflow.com/questions/8246070/...
Hlung

33

Aggiornare:

prefs: NON funzionerà da iOS 10.


4
Qual è l'alternativa?
OXXY

1
È pazzesco, dal momento che questo documento ufficiale di Apple ( developer.apple.com/library/ios/qa/qa1924/_index.html ) affronta intenzionalmente il problema delle preferenze e datato 8/2/2016.
daspianist

1
Quel documento dice solo di usarlo per le impostazioni della tastiera (qualsiasi cosa diversa da quell'uso specifico è una violazione.)
Peter Johnson

Sfortunatamente non sembra funzionare nemmeno per le impostazioni della tastiera in iOS 10.
Intrications

4
Anche se prefs:non funziona più, funziona quanto segue (almeno in apertura generale):App-Prefs::root=Settings&path=General
daspianista

22

Sì, ho visto questo (e molti altri), persino implementato in un'applicazione di test. Ho davvero bisogno di ottenere la parola definitiva da Apple, ma l'opinione consensuale della comunità è che Apple lo abbia rifiutato in 5.1 dopo che è stato pubblicamente "scoperto / pubblicato", quindi le applicazioni che lo contengono non saranno accettate.

Aggiornamento 08/01/12: Ho chiesto ad Apple tramite il mio account sviluppatore se esiste un modo per avviare in modo programmatico la finestra di dialogo Impostazioni WiFi. Ecco la risposta:

"I nostri tecnici hanno esaminato la tua richiesta e hanno concluso che non esiste un modo supportato per ottenere la funzionalità desiderata date le attuali configurazioni del sistema di spedizione."


9
Consiglio a chiunque abbia bisogno di questa funzionalità di registrare un bug report ufficiale. Più viene segnalato, più sarà visibile e maggiori saranno le possibilità che una soluzione supportata possa essere presentata in futuro. bugreport.apple.com
Matt Connolly

18

In iOS 9 funziona di nuovo!

Per aprire Impostazioni> Generali> Tastiera , utilizzo:

prefs:root=General&path=Keyboard

Inoltre, è possibile andare oltre alle tastiere :

prefs:root=General&path=Keyboard/KEYBOARDS

L'ho appena notato nell'app PopKey. Ho provato l'URL per Impostazioni> Impostazioni Wi-Fi e funziona anche. Speriamo che questo rimanga.
Jamie McDaniel,

Questi schemi devono essere aggiunti LSApplicationQueriesSchemesin info.plist?
Warpling

2
No, non lo fanno. Basta usarlo con openURL: metodo.
Mikhail

1
Sto cercando di usarlo per collegarmi alle impostazioni da una pagina web e sembra funzionare in Safari su un iPhone ma non su un iPad. Entrambi sono in 9.0.2. Sul serio, Apple?
Randy H.

3
Ancora necessario aggiungere lo schema URL prefs al target
shim

7

Volevo aprire il menu Bluetooth nell'applicazione Impostazioni e il percorso sopra (prefs: root = General & path = Bluetooth) non ha funzionato per me. Quello che ha finito per funzionare per me è stato

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

Assicurati di aver prefsdefinito prima lo schema URL.


Questo perché il menu Bluetooth è stato spostato nelle recenti versioni di iOS. Ora è un'impostazione di primo livello, non in Generale .
Nate

@ Imran: Hai dimenticato la prefsroba.
Michael Dorner

5

Soluzione per iOS10. Funziona bene.

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

È legittimo? L'invio di app di successo non significa che sia legittimo. Alla fine potrebbe fallire in futuro ..
Stas

@Stas: No, non lo è, poiché è un'API privata.
Tejas K

4

A partire da iOS10 puoi usare

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

per aprire le impostazioni generali.

inoltre puoi aggiungere URL conosciuti (puoi vederli nella risposta più votata) ad esso per aprire impostazioni specifiche. Ad esempio, quello sotto apre touchID e passcode.

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

1
"App-Prefs: root = TOUCHID_PASSCODE" non funziona su iOS 11. Qualche altra soluzione?
mio

App-Prefsè un'API privata che porterà al rifiuto dell'app durante la revisione.
Tejas K

2

Ecco qualcos'altro che ho trovato:

  1. Dopo aver definito lo schema URL "prefs", "prefs: root = Safari & path = ContentBlockers" funziona su Simulator (iOS 9.1 inglese ), ma non su Simulator (cinese semplificato) . Passa solo a Safari, ma non a Content Blocker. Se la tua app è internazionale, fai attenzione.
    Aggiornamento: non so perché, ora non posso più saltare a ContentBlockers, lo stesso codice, la stessa versione, non funziona ora. :(

  2. Su dispositivi reali (il mio è iPhone 6S e iPad mini 2), "Safari" dovrebbe essere "SAFARI" , "Safari" non funziona sul dispositivo reale, "SAFARI" ora funziona sul simulatore:

    #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. Finora non sono state riscontrate differenze tra iPhone e iPad.


Lo hai mai fatto funzionare di nuovo? Che peccato se no!
Ryan Brodie

@RyanBrodie Cosa intendi con "tale vergogna"?
Kaiyuan Xu

È molto sfortunato, sarebbe fantastico collegarsi direttamente alle impostazioni di Content Blocker di Safari
Ryan Brodie

6
@RyanBrodie Anche se potesse funzionare, ti suggerisco di non usarlo per App Store in questo momento, ho appena ricevuto un "rifiuto" da iTunes Connect questa mattina, perché "prefs: root" è un'API privata (ci sono app using prefs: root on App Store ... God know why)
Kaiyuan Xu

Non avevo capito che grazie mille per l'avvertimento!
Ryan Brodie

2

Funziona bene per le impostazioni di notifica delle app su IOS 10 (testato)

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


0

Sto aggiornando una notizia qui. L'utilizzo del solo "prefs:" NON è stato rifiutato da Apple, l'ho testato e verificato l'approvazione per l'app store (ad agosto 2016). grazie.


Sto usando questo [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=DO_NOT_DISTURB"]];per l'impostazione DND aperta del dispositivo. Apple rifiuterà questo?
Shreyank

Ha superato solo la revisione o funziona anche? Voglio dire, openURL ti porta alle impostazioni? Non ha funzionato dalla mia parte.
Ahmet Akkök
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.