Apertura dell'app Impostazioni da un'altra app


180

Va bene, so che ci sono molte domande a riguardo, ma sono tutte molto tempo fa.

Così. So che è possibile perché l'app Map lo fa.

Nell'app Mappa se disattivo la localizzazione per questa app, mi invia un messaggio e se premo OK, si aprirà "App Impostazioni". E la mia domanda è: come è possibile? Come posso aprire "Impostazione app" dalla mia app?

Fondamentalmente devo fare la stessa cosa, se l'utente disattiva la posizione per la mia app, quindi gli mostrerò un messaggio che dice qualcosa che aprirà "Impostazione app"



1
Puoi aprire l'app delle impostazioni in modo programmatico in iOS8 (ma non nelle versioni precedenti di iOS) .codice di seguito nelle risposte.
Karan Dua,

Risposte:


291

Come già detto da Karan Dua questo è ora possibile in iOS 8 usando UIApplicationOpenSettingsURLStringvedere la documentazione di Apple .

Esempio:

Rapido 4.2

UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!)

In Swift 3:

UIApplication.shared.open(URL(string:UIApplicationOpenSettingsURLString)!)

In Swift 2:

UIApplication.sharedApplication().openURL(NSURL(string:UIApplicationOpenSettingsURLString)!)

In Objective-C

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];

Prima di iOS 8:

Non puoi. Come hai detto, questo è stato coperto molte volte e quel pop-up che ti chiede di attivare i servizi di localizzazione è fornito da Apple e non dall'App stessa. Ecco perché è in grado di aprire l'applicazione delle impostazioni.

Ecco alcune domande e articoli correlati:

è possibile aprire l'app Impostazioni usando openURL?

Apertura programmatica dell'app impostazioni (iPhone)

Come posso aprire l'app Impostazioni quando l'utente preme un pulsante?

iPhone: apertura del pannello Preferenze dell'applicazione dall'app

Apri UIPickerView facendo clic su una voce nelle preferenze dell'app - Come?

Apri l'app Impostazioni?

iOS: impostazioni errate


Se hai bisogno di una risposta più autorevole, potresti provare a chiedere sui forum degli sviluppatori Apple < developer.apple.com/devforums > o a presentare un bug su < developer.apple.com/bugreporter > - se si tratta di un problema noto, dovrebbe tornare come "si comporta correttamente" o un duplicato del bug originale.
Vincent Gable,


2
Questo è ora possibile in iOS 8 utilizzando [NSURL URLWithString: UIApplicationOpenSettingsURLString]
LightningStryk

1
in swift 3 - UIApplication.shared.openURL (URL (stringa: UIApplicationOpenSettingsURLString)!)
GMHSJ

1
Diffidare di usare questo metodo. L'ho usato e pochi mesi dopo la mia app è stata respinta con il seguente messaggio di Apple: La tua app utilizza lo schema URL non pubblico "prefs: root =", che è un soggetto privato. L'uso di API non pubbliche non è consentito sull'App Store perché può comportare un'esperienza utente scadente qualora tali API cambino. Continuare a utilizzare o nascondere le API non pubbliche nei futuri invii di questa app può comportare la chiusura del proprio account Apple Developer, nonché la rimozione di tutte le app associate dall'App Store.
Nick Kirsten,

133

Da @Yatheeshaless 's risposta :

Puoi aprire l'app delle impostazioni a livello di codice in iOS8, ma non nelle versioni precedenti di iOS.

Swift:

   UIApplication.sharedApplication().openURL(NSURL(string:UIApplicationOpenSettingsURLString)!)

Swift 4:

if let url = NSURL(string: UIApplicationOpenSettingsURLString) as URL? {
    UIApplication.shared.openURL(url)
}

Swift 4.2 (BETA):

if let url = NSURL(string: UIApplication.openSettingsURLString) as URL? {
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
}

Objective-C:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];

23
Questo sembra aprire la sezione dell'app dell'app Impostazioni. Gli utenti dovranno tornare indietro alcune volte per visualizzare la schermata principale delle Impostazioni.
wjl

1
Piccola correzione ..[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
Paito

10
@Paito La riga sopra sta indirizzando alle impostazioni private dell'app . Esiste un modo per accedere alla sezione sulla privacy delle impostazioni del dispositivo? Per favore, commenta se lo sai. Questo reindirizzamento è possibile, come l'ho trovato nell'app delle mappe in cui indirizza alle impostazioni della posizione nella sezione sulla privacy.
Pavan Kotesh,

1
Correzione Swift piccola: UIApplication.sharedApplication (). OpenURL (NSURL (stringa: UIApplicationOpenSettingsURLString)!)
vbezhenar

1
@ PavanKotesh- Sì, ma le impostazioni dell'app avranno ciò di cui hai bisogno, nel mio caso avevo bisogno dell'accesso ai contatti, che appaiono nelle impostazioni dell'app con il codice sopra.
Tejas K,

58

SÌ!! puoi avviare la schermata Impostazioni dispositivo, che ho testato su iOS 9.2

Passaggio 1. È necessario aggiungere schemi URL

Vai a Impostazioni progetto -> Informazioni -> Tipi di URL -> Aggiungi nuovi schemi URL

inserisci qui la descrizione dell'immagine

Passaggio 2. Avvio delle impostazioni a livello di codice Grazie a @davidcann

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]];

Inoltre, possiamo avviare schermate secondarie come musica, posizione ecc. Anche semplicemente usando il nome proprio

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

Vedi l'elenco completo dei nomi qui condiviso da Henri Normak


Aggiornare:

Secondo il commento, tutti vogliono sapere cosa succede dopo questa modifica allo stato di invio della mia domanda?

Così YES!! I got successful update submission and application is available on store without any complain.

Solo per confermare, ho appena scaricato questa mattina e disabilitato i servizi di localizzazione, quindi ho avviato l'app, che mi ha chiesto l'autorizzazione per la posizione e quindi il mio popup di avviso era lì per inviarmi sulle impostazioni -> pagina dei servizi di localizzazione -> Abilitato -> Questo è tutto!!

! [AVVISO: l'app potrebbe essere rifiutata ... anche se approvata, può essere rifiutata nella versione futura se si utilizza questo metodo ...] 4


Grazie, funziona anche per me su iOS 6 e 7. Hai già provato a farlo attraverso il processo di revisione di Apple?
Flo

1
@Flo Ti farò sapere, perché al momento ho spinto per il beta test.
swiftBoy

1
iOS 9.3. Ha funzionato come un fascino. Vedo anche "Torna a [nome della mia app]" nell'app delle impostazioni. Sicuramente, questo è supportato perché vedo molte altre app che fanno questo tipo di cose!
EricWas:

13
Su iOS 10, il nuovo URL non è "prefs: root = ...." ma "App-Prefs: root = ...".
Drico,

1
La tua app potrebbe essere rifiutata ... anche se approvata, potrebbe essere rifiutata nella versione futura se usi questo metodo ...
Mihir Mehta

18

Puoi usarlo su iOS 5.0 e versioni successive: non funziona più.

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]];

3
@MarkGranoff No, sembra tecnicamente non documentato, ma non è così male come una normale API non documentata, dal momento che è solo uno schema URL. Puoi verificarlo con canOpenURL: prima. Inoltre, c'è una discussione qui: devforums.apple.com/message/543818
davidcann

3
È possibile accedere a diverse aree nelle impostazioni in base a questo articolo . Ad esempio questo URL ti porterà alle impostazioni Bluetoothprefs:root=General&path=Bluetooth
progr

1
Ho ricevuto un'applicazione respinta per l'utilizzo dell'API privata perché stavo aprendo l'URL: @ "prefs: root = Brightness". Di solito, non documentato significa privato.
Guillaume,

4
Apple ha dichiarato che questa non era un'API pubblica e non è più supportata. C'è un bug archiviato su questo numero, numero 11253669.
Don Wilson,

2
Ho appena visto che funziona nell'app Strava. Disattiva il Bluetooth e quindi attivalo nell'app. Quindi chiede di accedere all'app delle impostazioni e passa direttamente alle impostazioni Bluetooth. Questo è per iOS5.1. C'è un modo per scoprire quale schema stanno usando?
Formiche

14

aggiornamento iOS 10

Apple ha modificato il metodo per aprire asincrono sul thread principale. Tuttavia, da ora è possibile aprire le impostazioni dell'app solo nelle impostazioni native.

[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];

aggiornamento iOS 9

Ora è possibile accedere direttamente al menu delle impostazioni secondarie. Tuttavia, è necessario creare uno schema URL. Può essere fatto in due modi:

  1. XCode: lo troverai in Target, Informazioni, Schema URL. Quindi, digita prefs.
  2. Aggiunta diretta a * -Info.plist. Aggiungi quanto segue: <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLSchemes</key> <array> <string>prefs</string> </array> </dict> </array>

Quindi il codice:

veloce

UIApplication.sharedApplication().openURL(NSURL(string:"prefs:root=General&path=Keyboard")!)

Objective-C

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


1
Ho provato la soluzione iOS 10.x e non ha funzionato per me - non succede nulla.
Mark Peters,

@MarkPeters, hai già trovato un modo? Potrebbe essere di grande aiuto. Grazie.
Roohul Poolak,

No, non l'ho fatto. Non so ancora se si tratta di un bug iOS o se Apple ha appena rimosso la funzione.
Mark Peters,

Penso che funzionino ancora con Extensions. L'ex app è Magic Launcherin Appstore.
Tridente,

4

In Swift 3 / iOS 10+ ora sembra

if let url = URL(string: "App-Prefs:root=LOCATION_SERVICES") {
    UIApplication.shared.open(url, completionHandler: .none)
}

come arrivare alla schermata di notifica? perché if let url = URL (stringa: "App-Prefs: root = NOTIFICATIONS_ID & path = io.artup.artup") {if #available (iOS 10.0, *) {UIApplication.shared.open (url, completamentoHandler: .none)} } ma sono andato alla notifica in iPhone 6 non in iPhone 7 plus?
user3804063,

3
In questo modo l'app verrà rifiutata. Lo hanno messo sotto l'uso di API private.
Bersaelor,

Ho rifiutato la mia app, usando questo "App-Prefs: root"
Malder,

1
Sottolinea ciò che altri hanno menzionato qui, non utilizzare questo metodo, la tua app verrà rifiutata. L'invio ripetuto di un'app con tale verrà chiuso il tuo account sviluppatore.
CodeBrew

4

Swift 3:

guard let url = URL(string: UIApplicationOpenSettingsURLString) else {return}
if #available(iOS 10.0, *) {
  UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
  // Fallback on earlier versions
  UIApplication.shared.openURL(url)
}

4

Sembra che tu possa usare l' prefs:<area>URL per aprire le impostazioni e andare in aree specifiche. Apple potrebbe cambiarli e rompere la tua app, quindi controlla sempre se riesci ad aprirli prima.

Da questo articolo ne hanno elencati alcuni per iOS 13.1:

URL delle impostazioni

iCloud

  • iCloud: prefs:root=CASTLE
  • Backup iCloud: prefs:root=CASTLE&path=BACKUP

Radio wireless

  • Wi-Fi: prefs:root=WIFI
  • Bluetooth: prefs:root=Bluetooth
  • Cellulare: prefs:root=MOBILE_DATA_SETTINGS_ID

Hotspot personale

  • Hotspot personale: prefs:root=INTERNET_TETHERING
  • Hotspot personale ⇾ Condivisione famiglia: prefs:root=INTERNET_TETHERING&path=Family%20Sharing
  • Hotspot personale Password Password Wi-Fi: prefs:root=INTERNET_TETHERING&path=Wi-Fi%20Password

VPN

  • VPN: prefs:root=General&path=VPN

notifiche

  • notifiche: prefs:root=NOTIFICATIONS_ID
  • Notifiche ⇾ Suggerimenti Siri: prefs:root=NOTIFICATIONS_ID&path=Siri%20Suggestions

Suoni

  • Suoni: prefs:root=Sounds
  • Suoneria: prefs:root=Sounds&path=Ringtone

Non disturbare

  • Non disturbare: prefs:root=DO_NOT_DISTURB
  • Non disturbare ⇾ Consenti chiamate da: prefs:root=DO_NOT_DISTURB&path=Allow%20Calls%20From

Screen Time

  • Tempo di schermo: prefs:root=SCREEN_TIME
  • Tempo schermo time Tempo di inattività: prefs:root=SCREEN_TIME&path=DOWNTIME
  • Tempo schermo Lim Limiti app: prefs:root=SCREEN_TIME&path=APP_LIMITS
  • Screen Time ⇾ Sempre consentito: prefs:root=SCREEN_TIME&path=ALWAYS_ALLOWED

Generale

  • Generale: prefs:root=General
  • Generale ⇾ Informazioni su: prefs:root=General&path=About
  • Generale ⇾ Aggiornamento software: prefs:root=General&path=SOFTWARE_UPDATE_LINK
  • Generale ⇾ CarPlay: prefs:root=General&path=CARPLAY
  • Generale ⇾ Aggiornamento app in background: prefs:root=General&path=AUTO_CONTENT_DOWNLOAD
  • Generale ⇾ Multitasking (solo iPad): prefs:root=General&path=MULTITASKING
  • Generale ⇾ Data e ora: prefs:root=General&path=DATE_AND_TIME
  • Generale ⇾ Tastiera: prefs:root=General&path=Keyboard
  • Generale ⇾ Tastiera ⇾ Tastiere: prefs:root=General&path=Keyboard/KEYBOARDS
  • Generale ⇾ Tastiera ⇾ Tastiera hardware: prefs:root=General&path=Keyboard/Hardware%20Keyboard
  • Generale ⇾ Tastiera ⇾ Sostituzione testo: prefs:root=General&path=Keyboard/USER_DICTIONARY
  • Generale ⇾ Tastiera ⇾ Tastiera a una mano: prefs:root=General&path=Keyboard/ReachableKeyboard
  • Generale ⇾ Lingua e regione: prefs:root=General&path=INTERNATIONAL
  • Generale ⇾ Dizionario: prefs:root=General&path=DICTIONARY
  • Generale ⇾ Profili: prefs:root=General&path=ManagedConfigurationList
  • Generale ⇾ Ripristina: prefs:root=General&path=Reset

Centro di controllo

  • Centro di controllo: prefs:root=ControlCenter
  • Centro di controllo ⇾ Personalizza i controlli: prefs:root=ControlCenter&path=CUSTOMIZE_CONTROLS

Schermo

  • Schermo: prefs:root=DISPLAY
  • Display Lock Blocco automatico: prefs:root=DISPLAY&path=AUTOLOCK
  • Visualizza ⇾ Dimensioni testo: prefs:root=DISPLAY&path=TEXT_SIZE

Accessibilità

  • Accessibilità: prefs:root=ACCESSIBILITY

Sfondo

  • Sfondo: prefs:root=Wallpaper

Siri

  • Siri: prefs:root=SIRI

Matita Di Mele

  • Apple Pencil (solo iPad): prefs:root=Pencil

Face ID

  • Face ID: prefs:root=PASSCODE

SOS di emergenza

  • SOS di emergenza: prefs:root=EMERGENCY_SOS

Batteria

  • Batteria: prefs:root=BATTERY_USAGE
  • Batteria Health Stato batteria (solo iPhone): prefs:root=BATTERY_USAGE&path=BATTERY_HEALTH

vita privata

  • Privacy: prefs:root=Privacy
  • Privacy ⇾ Servizi di localizzazione: prefs:root=Privacy&path=LOCATION
  • Privacy ⇾ Contatti: prefs:root=Privacy&path=CONTACTS
  • Privacy ⇾ Calendari: prefs:root=Privacy&path=CALENDARS
  • Privacy ⇾ Promemoria: prefs:root=Privacy&path=REMINDERS
  • Privacy ⇾ Foto: prefs:root=Privacy&path=PHOTOS
  • Privacy ⇾ Microfono: prefs:root=Privacy&path=MICROPHONE
  • Privacy ⇾ Riconoscimento vocale: prefs:root=Privacy&path=SPEECH_RECOGNITION
  • Privacy ⇾ Telecamera: prefs:root=Privacy&path=CAMERA
  • Privacy ⇾ Motion: prefs:root=Privacy&path=MOTION\

App Store

  • App Store: prefs:root=STORE
  • App Store Downloads Download app: prefs:root=STORE&path=App%20Downloads
  • App Store ⇾ Riproduzione video automatica: prefs:root=STORE&path=Video%20Autoplay

Portafoglio

  • Portafoglio: prefs:root=PASSBOOK

Password e account

  • Password e account: prefs:root=ACCOUNTS_AND_PASSWORDS
  • Password e account ⇾ Recupera nuovi dati: prefs:root=ACCOUNTS_AND_PASSWORDS&path=FETCH_NEW_DATA
  • Password e account ⇾ Aggiungi account: prefs:root=ACCOUNTS_AND_PASSWORDS&path=ADD_ACCOUNT

posta

  • mail: prefs:root=MAIL
  • Posta ⇾ Anteprima: prefs:root=MAIL&path=Preview
  • Posta ⇾ Opzioni di scorrimento: prefs:root=MAIL&path=Swipe%20Options
  • Posta ⇾ Notifiche: prefs:root=MAIL&path=NOTIFICATIONS
  • Posta ⇾ bloccata: prefs:root=MAIL&path=Blocked
  • Posta ⇾ Azione discussione disattivata: prefs:root=MAIL&path=Muted%20Thread%20Action
  • Posta Options Opzioni mittente bloccate: prefs:root=MAIL&path=Blocked%20Sender%20Options
  • Posta ⇾ Segna gli indirizzi: prefs:root=MAIL&path=Mark%20Addresses
  • Posta ⇾ Aumenta il livello di preventivo: prefs:root=MAIL&path=Increase%20Quote%20Level
  • Posta ⇾ Includi allegati con risposte: prefs:root=MAIL&path=Include%20Attachments%20with%20Replies
  • Posta ⇾ Firma: prefs:root=MAIL&path=Signature
  • Posta ⇾ Account predefinito: prefs:root=MAIL&path=Default%20Account

Contatti

  • Contatti: prefs:root=CONTACTS

Calendario

  • Calendario: prefs:root=CALENDAR
  • Calendario ⇾ Calendari alternativi: prefs:root=CALENDAR&path=Alternate%20Calendars
  • Calendario ⇾ Sincronizza: prefs:root=CALENDAR&path=Sync
  • Calendario ⇾ Tempi di avviso predefiniti: prefs:root=CALENDAR&path=Default%20Alert%20Times
  • Calendario Calendar Calendario predefinito: prefs:root=CALENDAR&path=Default%20Calendar

Appunti

  • Appunti: prefs:root=NOTES
  • Note ⇾ Account predefinito: prefs:root=NOTES&path=Default%20Account
  • Note ⇾ Password: prefs:root=NOTES&path=Password
  • Note ⇾ Ordina note per: prefs:root=NOTES&path=Sort%20Notes%20By
  • Note ⇾ Le nuove note iniziano con: prefs:root=NOTES&path=New%20Notes%20Start%20With
  • Note ⇾ Ordina elementi selezionati: prefs:root=NOTES&path=Sort%20Checked%20Items
  • Note ⇾ Linee e griglie: prefs:root=NOTES&path=Lines%20%26%20Grids
  • Note ⇾ Accedere alle note dalla schermata di blocco: prefs:root=NOTES&path=Access%20Notes%20from%20Lock%20Screen

promemoria

  • promemoria: prefs:root=REMINDERS
  • Promemoria ⇾ Elenco predefinito: prefs:root=REMINDERS&path=DEFAULT_LIST

Memo vocali

  • Memo vocali: prefs:root=VOICE_MEMOS

Telefono

  • Telefono: prefs:root=Phone

messaggi

  • messaggi: prefs:root=MESSAGES

FaceTime

  • FaceTime: prefs:root=FACETIME

Mappe

  • Mappe: prefs:root=MAPS
  • Mappe ⇾ Guida e navigazione: prefs:root=MAPS&path=Driving%20%26%20Navigation
  • Mappe ⇾ Transito: prefs:root=MAPS&path=Transit

Bussola

  • Bussola: prefs:root=COMPASS

Misurare

  • Misurare: prefs:root=MEASURE

Safari

  • Safari: prefs:root=SAFARI
  • Safari ⇾ Content Blocker: prefs:root=SAFARI&path=Content%20Blockers
  • Safari ⇾ Download: prefs:root=SAFARI&path=DOWNLOADS
  • Safari ⇾ Chiudi schede: prefs:root=SAFARI&path=Close%20Tabs
  • Safari ⇾ Cancella cronologia e dati: prefs:root=SAFARI&path=CLEAR_HISTORY_AND_DATA
  • Safari Zoom Zoom pagina: prefs:root=SAFARI&path=Page%20Zoom
  • Safari ⇾ Richiedi sito Web desktop: prefs:root=SAFARI&path=Request%20Desktop%20Website
  • Safari ⇾ Reader: prefs:root=SAFARI&path=Reader
  • Safari ⇾ Fotocamera: prefs:root=SAFARI&path=Camera
  • Safari ⇾ Microfono: prefs:root=SAFARI&path=Microphone
  • Safari ⇾ Posizione: prefs:root=SAFARI&path=Location
  • Safari ⇾ Avanzato: prefs:root=SAFARI&path=ADVANCED

notizia

  • Notizia: prefs:root=NEWS

Salute

  • Salute: prefs:root=HEALTH

Tasti di scelta rapida

  • Tasti di scelta rapida: prefs:root=SHORTCUTS

Musica

  • Musica: prefs:root=MUSIC
  • Musica ⇾ Dati cellulari: prefs:root=MUSIC&path=com.apple.Music:CellularData
  • Musica ⇾ Ottimizza archiviazione: prefs:root=MUSIC&path=com.apple.Music:OptimizeStorage
  • Musica ⇾ EQ: prefs:root=MUSIC&path=com.apple.Music:EQ
  • Musica Limit Limite volume: prefs:root=MUSIC&path=com.apple.Music:VolumeLimit

tv

  • Impostazioni ⇾ TV: prefs:root=TVAPP

Fotografie

  • Fotografie: prefs:root=Photos

telecamera

  • Telecamera: prefs:root=CAMERA
  • Fotocamera ⇾ Registra video: prefs:root=CAMERA&path=Record%20Video
  • Camera ⇾ Registra Slo-mo: prefs:root=CAMERA&path=Record%20Slo-mo

Libri

  • Libri: prefs:root=IBOOKS

Centro giochi

  • Centro giochi: prefs:root=GAMECENTER

3

UIApplicationOpenSettingsURLStringquesto funzionerà solo se in precedenza hai autorizzato qualsiasi autorizzazione. Ad esempio Posizione, Foto, Contatto, Accesso notifica push. Quindi se non hai tali autorizzazioni da parte dell'utente:

Se iOS 10 o versioni successive ,

Aprirà le Impostazioni ma poi andrà in crash. Il motivo, non c'è nulla nelle impostazioni per la tua app.

Sotto il codice si apriranno le impostazioni dell'applicazione all'interno delle Impostazioni iOS.

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

A causa dell'indisponibilità del dispositivo, non sono riuscito a verificarlo su iOS <10.

Inoltre, ho potuto trovare il codice qui sotto da alcune informazioni e funziona bene anche su iOS 10. Ma non sono sicuro che ciò verrà approvato o meno dal team di revisione di Apple.

https://gist.github.com/johnny77221/bcaa5384a242b64bfd0b8a715f48e69f


3

In Swift 3 tutto ciò di cui avevo bisogno è questo (qui ad esempio reindirizzare alle notifiche della mia app):

if let url = URL(string: "App-Prefs:root=NOTIFICATIONS_ID&path=your app bundleID") {
    if #available(iOS 10.0, *) {
        UIApplication.shared.open(url, completionHandler: .none)
    } else {
        // Fallback on earlier versions
    }
}

Fonte: phynet gist .

Questo ha funzionato con me solo quando le impostazioni sono in background. Ti reindirizzerà alle impostazioni di notifica dell'app ma se le impostazioni non erano in esecuzione in background ti reindirizzerà alle impostazioni di notifica in generale.


1

È possibile utilizzare il seguente codice per questo.

[[UIApplication sharedApplication]openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];

1

SWIFT 4.0

'openURL' è stato deprecato in iOS 10.0: utilizzare invece openURL: opzioni: completamentoHandler: invece

UIApplication.shared.open(URL.init(string: UIApplicationOpenSettingsURLString)! , options: [:], completionHandler: nil)

1

Swift 4

Preferisco aprire le impostazioni in modo più sicuro,

if let settingUrl = URL(string:UIApplicationOpenSettingsURLString) {

    UIApplication.shared.open(settingUrl)
}
else {
    print("Setting URL invalid")
}

0

Swift È possibile utilizzare la seguente funzione per aprire l'app Impostazioni con la pagina Bluetooth

func openSettingsApp(){
    if let settings = NSURL(string: "prefs:root=Bluetooth") {
        UIApplication.sharedApplication().openURL(settings)
    }
}

Ancora una volta questo non aprirebbe le impostazioni dell'app. Ciò aprirebbe l'app delle impostazioni con Bluetooth in quanto si tratta di un collegamento diretto al bluetooth.


0

Testato con iOS 10. Funzionante

NSArray* urlStrings = @[@"prefs:root=WIFI", @"App-Prefs:root=WIFI"];
for(NSString* urlString in urlStrings){
NSURL* url = [NSURL URLWithString:urlString];
if([[UIApplication sharedApplication] canOpenURL:url]){
    [[UIApplication sharedApplication] openURL:url];
    break;
}
}

Happy Coding :)


3
In questo modo l'app verrà rifiutata. Mi è appena successo.
Bersaelor,

È così, ma questa riga di codice ti porterà direttamente nella posizione desiderata
Praveen Sharma,

1
Sì, ti porterà lì. Non sto dicendo che non funziona, sto solo sottolineando che ti verrà rifiutato durante la revisione dell'app. "prefs: root" è uno schema di URL privato secondo quanto ci ha detto il team di revisione. (Potresti essere fortunato e non se ne accorgono per un po ', abbiamo avuto la funzionalità per un po' e abbiamo passato diverse recensioni prima che il recensore se ne
accorgesse

Grazie per le informazioni, proverei qualcos'altro, ma in questo momento sono bloccato nella connettività VPN, trovando una soluzione per questo.
Praveen Sharma,

0

Per aggiungere una risposta accettata: (dalla documentazione per sviluppatori Apple) "Quando apri l'URL creato da questa stringa (openSettingsURLString), il sistema avvia l'app Impostazioni e visualizza le impostazioni personalizzate dell'app, se presenti." Quindi, se vuoi aprire le impostazioni per la tua app, crea il tuo Settings.bundle.


-1

Aggiungi questo alla tua classe,

 public class func showSettingsAlert(title:String,message:String,onVC viewController:UIViewController,onCancel:(()->())?){
            YourClass.show2ButtonsAlert(onVC: viewController, title: title, message: message, button1Title: "Settings", button2Title: "Cancel", onButton1Click: {
                if let settingsURL = NSURL(string: UIApplicationOpenSettingsURLString){
                    UIApplication.sharedApplication().openURL(settingsURL)
                }
                }, onButton2Click: {
                    onCancel?()
            })
        }

 public class func show2ButtonsAlert(onVC viewController:UIViewController,title:String,message:String,button1Title:String,button2Title:String,onButton1Click:(()->())?,onButton2Click:(()->())?){
            dispatch_async(dispatch_get_main_queue()) {
                let alert : UIAlertController = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)

                alert.addAction(UIAlertAction(title: button1Title, style:.Default, handler: { (action:UIAlertAction) in
                    onButton1Click?()
                }))

                alert.addAction(UIAlertAction(title: button2Title, style:.Default, handler: { (action:UIAlertAction) in
                    onButton2Click?()
                }))

                viewController.presentViewController(alert, animated: true, completion: nil)
            }
        }

Chiama così,

YourClass.showSettingsAlert("App would like to access camera", message: "App would like to access camera desc", onVC: fromViewController, onCancel: {
  print("canceled")
})
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.