Ouverture de l'application Paramètres à partir d'une autre application

180

D'accord, je sais qu'il y a beaucoup de questions à ce sujet, mais elles datent toutes d'il y a longtemps.

Alors. Je sais que c'est possible parce que l'application Map le fait.

Dans l'application Carte, si je désactive la localisation de cette application, elle m'envoie un message et si j'appuie sur OK, l'application "Paramètres" s'ouvre. Et ma question est, comment est-ce possible? Comment puis-je ouvrir l'application "Paramètres" depuis ma propre application?

Fondamentalement, je dois faire la même chose, si l'utilisateur désactive l'emplacement de mon application, je lui montrerai un message disant quelque chose qui ouvrira l'application "Paramètres de l'application"

FelipeDev.-
la source
Vérifiez celui-ci stackoverflow.com/questions/377102/…
Yatheesha BL
1
Vous pouvez ouvrir l'application de paramètres par programme dans iOS8 (mais pas dans les versions inférieures d'iOS) .code ci-dessous dans les réponses.
Karan Dua

Réponses:

291

Comme l'a dit Karan Dua cela est maintenant possible iOS8 utilisant UIApplicationOpenSettingsURLStringvoir la documentation d'Apple .

Exemple:

Swift 4.2

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

Dans Swift 3:

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

Dans Swift 2:

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

En Objective-C

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

Avant iOS 8:

Vous ne pouvez pas. Comme vous l'avez dit, cela a été couvert à de nombreuses reprises et cette fenêtre vous demandant d'activer les services de localisation est fournie par Apple et non par l'application elle-même. C'est pourquoi il est capable d'ouvrir l'application des paramètres.

Voici quelques questions et articles connexes:

est-il possible d'ouvrir l'application Paramètres en utilisant openURL?

Ouverture par programme de l'application des paramètres (iPhone)

Comment puis-je ouvrir l'application Paramètres lorsque l'utilisateur appuie sur un bouton?

iPhone: ouverture du panneau des préférences de l'application depuis l'application

Ouvrez UIPickerView en cliquant sur une entrée dans les préférences de l'application - Comment faire?

Ouvrez l'application Paramètres?

iOS: vous faites des réglages erronés

Joe
la source
Si vous avez besoin d'une réponse plus fiable, vous pouvez essayer de demander sur les forums des développeurs Apple < developer.apple.com/devforums > ou de déposer un bogue sur < developer.apple.com/bugreporter > - s'il s'agit d'un problème connu, il devrait revenir comme "se comporte correctement" ou une copie du bogue d'origine.
Vincent Gable
2
Ceci est désormais possible dans iOS 8 en utilisant [NSURL URLWithString: UIApplicationOpenSettingsURLString]
LightningStryk
1
dans swift 3 - UIApplication.shared.openURL (URL (string: UIApplicationOpenSettingsURLString)!)
GMHSJ
1
Méfiez-vous de cette méthode. Je l'ai utilisé et quelques mois plus tard, mon application a été rejetée avec le message suivant d'Apple: Votre application utilise le schéma d'URL non public "prefs: root =", qui est une entité privée. L'utilisation d'API non publiques n'est pas autorisée sur l'App Store car elle peut conduire à une mauvaise expérience utilisateur si ces API changent. Continuer à utiliser ou dissimuler des API non publiques dans les futures soumissions de cette application peut entraîner la résiliation de votre compte de développeur Apple, ainsi que la suppression de toutes les applications associées de l'App Store.
Nick Kirsten
133

D' après la réponse de @Yatheeshaless :

Vous pouvez ouvrir l'application de paramètres par programme dans iOS8, mais pas dans les versions antérieures d'iOS.

Rapide:

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

Swift 4:

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

Swift 4.2 (BÊTA):

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

Objectif c:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
Karan Dua
la source
23
Cela semble ouvrir la section de votre application de l'application Paramètres. Les utilisateurs devront appuyer sur Retour plusieurs fois pour voir l'écran principal des paramètres.
wjl
1
Petite correction ..[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
Paito
10
@Paito La ligne ci-dessus dirige vers les paramètres privés de l'application . Existe-t-il un moyen d'accéder à la section de confidentialité des paramètres de l'appareil? Veuillez commenter si vous savez. Cette redirection est possible, car je l'ai trouvée dans l'application Maps où elle dirige vers les paramètres de localisation dans la section de confidentialité.
Pavan Kotesh
1
Petite correction Swift: UIApplication.sharedApplication (). OpenURL (NSURL (string: UIApplicationOpenSettingsURLString)!)
vbezhenar
1
@ PavanKotesh - Oui, mais les paramètres de l'application auront ce pour quoi vous avez besoin de l'autorisation, dans mon cas, j'avais besoin d'un accès aux contacts, qui apparaissent dans les paramètres de l'application avec le code ci-dessus.
Tejas K
58

OUI!! vous pouvez lancer l'écran Paramètres de l'appareil, j'ai testé sur iOS 9.2

Étape 1. nous devons ajouter des schémas d'URL

Accédez aux paramètres du projet -> Info -> Types d'URL -> Ajouter de nouveaux schémas d'URL

entrez la description de l'image ici

Étape 2. Lancez les paramètres par programme grâce à @davidcann

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

Nous pouvons également lancer des sous-écrans tels que Musique, Localisation, etc. en utilisant simplement le nom propre

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

Voir cette liste de noms complète ici partagée par Henri Normak


Mettre à jour:

Selon le commentaire, tout le monde veut savoir ce qui se passe après ce changement de statut de soumission de candidature?

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

Juste pour confirmer, je viens de télécharger ce matin et j'ai désactivé les services de localisation, puis j'ai démarré l'application, qui m'a demandé l'autorisation de localisation, puis ma fenêtre contextuelle d'alerte était là pour m'envoyer sur les paramètres -> page des services de localisation -> Activé -> C'est tout!!

! [AVIS: Votre application pourrait être rejetée ... même si elle est approuvée, elle pourra être rejetée dans la version future si vous utilisez cette méthode ...] 4

swiftBoy
la source
Merci, fonctionne pour moi, aussi sur iOS 6 et 7. Avez-vous déjà essayé de le faire passer par le processus d'examen d'Apple?
Flo
1
@Flo Je vous le ferai savoir, car actuellement, j'ai poussé pour des tests bêta.
swiftBoy
1
iOS 9.3. A travaillé comme un charme. Je vois même "Retour à [nom de mon application]" dans l'application des paramètres. Cela est sûrement pris en charge car je vois beaucoup d'autres applications qui font ce genre de chose!
EricWasTaken le
13
Sur iOS 10, la nouvelle URL n'est pas "prefs: root = ...." mais "App-Prefs: root = ...".
Drico
1
Votre application pourrait être rejetée ... même si elle est approuvée, elle pourra être rejetée dans la version future si vous utilisez cette méthode ...
Mihir Mehta
18

Vous pouvez l'utiliser sur iOS 5.0 et versions ultérieures: cela ne fonctionne plus.

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]];
Davidcann
la source
3
@MarkGranoff Non, cela semble techniquement non documenté, mais ce n'est pas aussi mauvais qu'une API non documentée normale, car il ne s'agit que d'un schéma d'URL. Vous pouvez le vérifier avec canOpenURL: first. En outre, il y a un fil à ce sujet ici: devforums.apple.com/message/543818
davidcann
3
Vous pouvez accéder à différentes zones dans les paramètres selon cet article . Par exemple, cette URL vous mènera aux paramètres Bluetoothprefs:root=General&path=Bluetooth
programme du
1
J'ai eu une application rejetée pour avoir utilisé une API privée parce que j'ouvrais l'url: @ "prefs: root = Brightness". Habituellement, non documenté signifie privé.
Guillaume
4
Apple a déclaré qu'il ne s'agissait pas d'une API publique et qu'elle n'était plus prise en charge. Il y a un bug sur ce problème, numéro 11253669.
Don Wilson
2
Je viens de voir que cela fonctionne dans l'application Strava. Désactivez Bluetooth, puis activez-le dans l'application. Ensuite, il demande d'accéder à l'application des paramètres et il va directement aux paramètres Bluetooth. Ceci est pour iOS5.1. Existe-t-il un moyen de savoir quel schéma ils utilisent?
Ants
14

Mise à jour iOS 10

Apple a changé la méthode pour ouvrir async sur le thread principal. Cependant, à partir de maintenant, il n'est possible d'ouvrir les paramètres de l'application que dans les paramètres natifs.

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

Mise à jour iOS 9

Il est désormais possible d'accéder directement au menu des sous-paramètres. Cependant, un schéma d'URL doit être créé. Cela peut être fait de deux manières:

  1. XCode - Vous le trouverez dans Target, Info, URL Scheme. Ensuite, tapez simplement prefs.
  2. Ajout direct à * -Info.plist. Ajoutez ce qui suit: <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLSchemes</key> <array> <string>prefs</string> </array> </dict> </array>

Puis le code:

Rapide

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

Objectif c

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

guyromb
la source
1
J'ai essayé la solution iOS 10.x, et cela n'a pas fonctionné pour moi - rien ne se passe.
Mark Peters
@MarkPeters, avez-vous encore trouvé un moyen? Cela pourrait être d'une grande aide. Merci.
Roohul Poolak le
Non, je n'ai pas. Je ne sais toujours pas s'il s'agit d'un bogue iOS ou si Apple vient de supprimer la fonctionnalité.
Mark Peters
Je pense qu'ils fonctionnent toujours avec les extensions. Ex app est Magic Launcherdans l'Appstore.
Trident
4

Dans Swift 3 / iOS 10+, cela ressemble maintenant à

if let url = URL(string: "App-Prefs:root=LOCATION_SERVICES") {
    UIApplication.shared.open(url, completionHandler: .none)
}
Damo
la source
comment accéder à l'écran de notification? car if let url = URL (string: "App-Prefs: root = NOTIFICATIONS_ID & path = io.artup.artup") {if #available (iOS 10.0, *) {UIApplication.shared.open (url, completionHandler: .none)} } mais je suis allé à la notification dans l'iPhone 6 pas dans l'iPhone 7 plus?
user3804063
3
Votre application sera rejetée. Ils l'ont mis sous utilisation d'API privée.
Bersaelor
J'ai rejeté mon application, en utilisant ce "App-Prefs: root"
Malder
1
Soulignez simplement ce que les autres ont mentionné ici, n'utilisez pas cette méthode, votre application sera rejetée. Soumettre à plusieurs reprises une application avec un tel système fermera votre compte de développeur.
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)
}
Duy Doan
la source
4

On dirait que vous pouvez utiliser l' prefs:<area>URL pour ouvrir les paramètres et accéder à des zones spécifiques. Apple pourrait les modifier et casser votre application, alors vérifiez toujours si vous pouvez les ouvrir en premier.

À partir de cet article, ils en ont répertorié certains pour iOS 13.1:

URL des paramètres

iCloud

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

Radios sans fil

  • Wifi: prefs:root=WIFI
  • Bluetooth: prefs:root=Bluetooth
  • Cellulaire: prefs:root=MOBILE_DATA_SETTINGS_ID

Hotspot personnel

  • Hotspot personnel: prefs:root=INTERNET_TETHERING
  • Hotspot personnel ⇾ Partage familial: prefs:root=INTERNET_TETHERING&path=Family%20Sharing
  • Point d'accès personnel ⇾ Mot de passe Wi-Fi: prefs:root=INTERNET_TETHERING&path=Wi-Fi%20Password

VPN

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

Notifications

  • Notifications: prefs:root=NOTIFICATIONS_ID
  • Notifications ⇾ Suggestions Siri: prefs:root=NOTIFICATIONS_ID&path=Siri%20Suggestions

Des sons

  • Des sons: prefs:root=Sounds
  • Sonnerie: prefs:root=Sounds&path=Ringtone

Ne pas déranger

  • Ne pas déranger: prefs:root=DO_NOT_DISTURB
  • Ne pas déranger ⇾ Autoriser les appels de: prefs:root=DO_NOT_DISTURB&path=Allow%20Calls%20From

Temps d'écran

  • Temps d'écran: prefs:root=SCREEN_TIME
  • Temps d'écran ⇾ Temps d'arrêt: prefs:root=SCREEN_TIME&path=DOWNTIME
  • Temps d'écran ⇾ Limites de l'application: prefs:root=SCREEN_TIME&path=APP_LIMITS
  • Temps d'écran ⇾ Toujours autorisé: prefs:root=SCREEN_TIME&path=ALWAYS_ALLOWED

Général

  • Général: prefs:root=General
  • Général ⇾ À propos de: prefs:root=General&path=About
  • Général ⇾ Mise à jour du logiciel: prefs:root=General&path=SOFTWARE_UPDATE_LINK
  • Général ⇾ CarPlay: prefs:root=General&path=CARPLAY
  • Général Ref Actualisation de l'application en arrière-plan: prefs:root=General&path=AUTO_CONTENT_DOWNLOAD
  • Général ⇾ Multitâche (iPad uniquement): prefs:root=General&path=MULTITASKING
  • Général ⇾ Date et heure: prefs:root=General&path=DATE_AND_TIME
  • Général ⇾ Clavier: prefs:root=General&path=Keyboard
  • Général ⇾ Clavier ⇾ Claviers: prefs:root=General&path=Keyboard/KEYBOARDS
  • Général ⇾ Clavier ⇾ Clavier matériel: prefs:root=General&path=Keyboard/Hardware%20Keyboard
  • Général ⇾ Clavier ⇾ Remplacement de texte: prefs:root=General&path=Keyboard/USER_DICTIONARY
  • Général ⇾ Clavier ⇾ Clavier à une main: prefs:root=General&path=Keyboard/ReachableKeyboard
  • Général ⇾ Langue et région: prefs:root=General&path=INTERNATIONAL
  • Dictionnaire général ⇾: prefs:root=General&path=DICTIONARY
  • Général ⇾ Profils: prefs:root=General&path=ManagedConfigurationList
  • Général ⇾ Réinitialiser: prefs:root=General&path=Reset

Centre de contrôle

  • Centre de contrôle: prefs:root=ControlCenter
  • Centre de contrôle ⇾ Personnaliser les contrôles: prefs:root=ControlCenter&path=CUSTOMIZE_CONTROLS

Afficher

  • Afficher: prefs:root=DISPLAY
  • Affichage ⇾ Verrouillage automatique: prefs:root=DISPLAY&path=AUTOLOCK
  • Affichage ⇾ Taille du texte: prefs:root=DISPLAY&path=TEXT_SIZE

Accessibilité

  • Accessibilité: prefs:root=ACCESSIBILITY

Fond d'écran

  • Fond d'écran: prefs:root=Wallpaper

Siri

  • Siri: prefs:root=SIRI

Crayon Apple

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

ID de visage

  • ID de visage: prefs:root=PASSCODE

SOS d'urgence

  • SOS d'urgence: prefs:root=EMERGENCY_SOS

Batterie

  • Batterie: prefs:root=BATTERY_USAGE
  • Batterie ⇾ État de la batterie (iPhone uniquement): prefs:root=BATTERY_USAGE&path=BATTERY_HEALTH

Intimité

  • Intimité: prefs:root=Privacy
  • Confidentialité ⇾ Services de localisation: prefs:root=Privacy&path=LOCATION
  • Confidentialité ⇾ Contacts: prefs:root=Privacy&path=CONTACTS
  • Confidentialité ⇾ Calendriers: prefs:root=Privacy&path=CALENDARS
  • Confidentialité ⇾ Rappels: prefs:root=Privacy&path=REMINDERS
  • Confidentialité ⇾ Photos: prefs:root=Privacy&path=PHOTOS
  • Confidentialité ⇾ Microphone: prefs:root=Privacy&path=MICROPHONE
  • Confidentialité ⇾ Reconnaissance vocale: prefs:root=Privacy&path=SPEECH_RECOGNITION
  • Confidentialité ⇾ Caméra: prefs:root=Privacy&path=CAMERA
  • Confidentialité ⇾ Motion: prefs:root=Privacy&path=MOTION\

Magasin d'applications

  • Magasin d'applications: prefs:root=STORE
  • App Store ⇾ Téléchargements d'applications: prefs:root=STORE&path=App%20Downloads
  • App Store ⇾ Lecture automatique vidéo: prefs:root=STORE&path=Video%20Autoplay

Portefeuille

  • Portefeuille: prefs:root=PASSBOOK

Mots de passe et comptes

  • Mots de passe et comptes: prefs:root=ACCOUNTS_AND_PASSWORDS
  • Mots de passe et comptes ⇾ Récupérez de nouvelles données: prefs:root=ACCOUNTS_AND_PASSWORDS&path=FETCH_NEW_DATA
  • Mots de passe et comptes ⇾ Ajouter un compte: prefs:root=ACCOUNTS_AND_PASSWORDS&path=ADD_ACCOUNT

Courrier

  • Courrier: prefs:root=MAIL
  • Courrier ⇾ Aperçu: prefs:root=MAIL&path=Preview
  • Mail ⇾ Options de balayage: prefs:root=MAIL&path=Swipe%20Options
  • Courrier ⇾ Notifications: prefs:root=MAIL&path=NOTIFICATIONS
  • Courrier ⇾ bloqué: prefs:root=MAIL&path=Blocked
  • Courrier ⇾ Action de fil muet: prefs:root=MAIL&path=Muted%20Thread%20Action
  • Mail ⇾ Options d'expéditeur bloqué: prefs:root=MAIL&path=Blocked%20Sender%20Options
  • Adresse e-mail ⇾ Marquer les adresses: prefs:root=MAIL&path=Mark%20Addresses
  • Courrier ⇾ Augmenter le niveau de devis: prefs:root=MAIL&path=Increase%20Quote%20Level
  • Courrier ⇾ Inclure les pièces jointes avec les réponses: prefs:root=MAIL&path=Include%20Attachments%20with%20Replies
  • Courrier ⇾ Signature: prefs:root=MAIL&path=Signature
  • Mail ⇾ Compte par défaut: prefs:root=MAIL&path=Default%20Account

Contacts

  • Contacts: prefs:root=CONTACTS

Calendrier

  • Calendrier: prefs:root=CALENDAR
  • Calendrier ⇾ Calendriers alternatifs: prefs:root=CALENDAR&path=Alternate%20Calendars
  • Calendrier ⇾ Sync: prefs:root=CALENDAR&path=Sync
  • Calendrier ⇾ Heures d'alerte par défaut: prefs:root=CALENDAR&path=Default%20Alert%20Times
  • Calendrier ⇾ Calendrier par défaut: prefs:root=CALENDAR&path=Default%20Calendar

Remarques

  • Remarques: prefs:root=NOTES
  • Remarques ⇾ Compte par défaut: prefs:root=NOTES&path=Default%20Account
  • Remarques ⇾ Mot de passe: prefs:root=NOTES&path=Password
  • Notes ⇾ Trier les notes par: prefs:root=NOTES&path=Sort%20Notes%20By
  • Remarques ⇾ Les nouvelles notes commencent par: prefs:root=NOTES&path=New%20Notes%20Start%20With
  • Remarques ⇾ Trier les éléments cochés: prefs:root=NOTES&path=Sort%20Checked%20Items
  • Remarques ⇾ Lignes et grilles: prefs:root=NOTES&path=Lines%20%26%20Grids
  • Remarques ⇾ Accéder aux notes depuis l'écran de verrouillage: prefs:root=NOTES&path=Access%20Notes%20from%20Lock%20Screen

Rappels

  • Rappels: prefs:root=REMINDERS
  • Rappels ⇾ Liste par défaut: prefs:root=REMINDERS&path=DEFAULT_LIST

Mémos vocaux

  • Mémos vocaux: prefs:root=VOICE_MEMOS

Téléphone

  • Téléphone: prefs:root=Phone

messages

  • Messages: prefs:root=MESSAGES

FaceTime

  • FaceTime: prefs:root=FACETIME

Plans

  • Plans: prefs:root=MAPS
  • Cartes ⇾ Conduite et navigation: prefs:root=MAPS&path=Driving%20%26%20Navigation
  • Cartes ⇾ Transit: prefs:root=MAPS&path=Transit

Boussole

  • Boussole: prefs:root=COMPASS

Mesure

  • Mesure: prefs:root=MEASURE

Safari

  • Safari: prefs:root=SAFARI
  • Safari ⇾ Bloqueurs de contenu: prefs:root=SAFARI&path=Content%20Blockers
  • Téléchargements Safari ⇾: prefs:root=SAFARI&path=DOWNLOADS
  • Safari ⇾ Fermer les onglets: prefs:root=SAFARI&path=Close%20Tabs
  • Safari ⇾ Effacer l'historique et les données: prefs:root=SAFARI&path=CLEAR_HISTORY_AND_DATA
  • Safari ⇾ Zoom de page: prefs:root=SAFARI&path=Page%20Zoom
  • Safari ⇾ Demander le site Web de bureau: prefs:root=SAFARI&path=Request%20Desktop%20Website
  • Safari ⇾ Lecteur: prefs:root=SAFARI&path=Reader
  • Safari ⇾ Appareil photo: prefs:root=SAFARI&path=Camera
  • Safari ⇾ Microphone: prefs:root=SAFARI&path=Microphone
  • Safari ⇾ Emplacement: prefs:root=SAFARI&path=Location
  • Safari ⇾ Avancé: prefs:root=SAFARI&path=ADVANCED

Nouvelles

  • Nouvelles: prefs:root=NEWS

Santé

  • Santé: prefs:root=HEALTH

Raccourcis

  • Raccourcis: prefs:root=SHORTCUTS

La musique

  • La musique: prefs:root=MUSIC
  • Musique ⇾ Données cellulaires: prefs:root=MUSIC&path=com.apple.Music:CellularData
  • Musique ⇾ Optimiser le stockage: prefs:root=MUSIC&path=com.apple.Music:OptimizeStorage
  • Musique ⇾ EQ: prefs:root=MUSIC&path=com.apple.Music:EQ
  • Musique ⇾ Limite de volume: prefs:root=MUSIC&path=com.apple.Music:VolumeLimit

la télé

  • Paramètres ⇾ TV: prefs:root=TVAPP

Photos

  • Photos: prefs:root=Photos

Caméra

  • Caméra: prefs:root=CAMERA
  • Caméra ⇾ Enregistrer une vidéo: prefs:root=CAMERA&path=Record%20Video
  • Caméra ⇾ Enregistrer au ralenti: prefs:root=CAMERA&path=Record%20Slo-mo

Livres

  • Livres: prefs:root=IBOOKS

Centre de jeu

  • Centre de jeu: prefs:root=GAMECENTER
Iain Smith
la source
3

UIApplicationOpenSettingsURLStringcela ne fonctionnera que si vous avez préalablement autorisé une autorisation. Par exemple, emplacement, photo, contact, accès aux notifications push. Donc, si vous n'avez pas de telles autorisations de l'utilisateur:

Si iOS 10 ou supérieur ,

Il ouvrira les paramètres mais le plantera. La raison, il n'y a rien dans les paramètres de votre application.

Le code ci-dessous ouvrira les paramètres de votre application dans les paramètres iOS.

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

En raison de l'indisponibilité de l'appareil, je n'ai pas pu vérifier cela sur iOS <10.

En outre, je pourrais trouver ci-dessous du code à partir de l'essentiel et cela fonctionne également bien sur iOS 10. Mais je ne sais pas si cela sera approuvé par l'équipe d'examen Apple ou non.

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

Hemang
la source
3

Dans Swift 3, tout ce dont j'avais besoin est le suivant (ici par exemple, rediriger vers les notifications de mon application):

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
    }
}

Source: phynet gist .

Cela a fonctionné avec moi uniquement lorsque les paramètres sont en arrière-plan. Il vous redirigera vers les paramètres de notification de votre application, mais si les paramètres ne fonctionnaient pas en arrière-plan, il vous redirigera simplement vers les paramètres de notification en général.

ynamao
la source
1

Vous pouvez utiliser le code ci-dessous pour cela.

[[UIApplication sharedApplication]openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
Som
la source
1

SWIFT 4.0

'openURL' est obsolète dans iOS 10.0: veuillez utiliser openURL: options: completionHandler: à la place

UIApplication.shared.open(URL.init(string: UIApplicationOpenSettingsURLString)! , options: [:], completionHandler: nil)
Harshil Kotecha
la source
1

Swift 4

Je préfère ouvrir le décor de manière plus sûre,

if let settingUrl = URL(string:UIApplicationOpenSettingsURLString) {

    UIApplication.shared.open(settingUrl)
}
else {
    print("Setting URL invalid")
}
Sazzad Hissain Khan
la source
0

Swift Vous pouvez utiliser la fonction suivante pour ouvrir l'application Paramètres avec la page Bluetooth

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

Encore une fois, cela n'ouvrirait pas les paramètres de l'application. Cela ouvrirait l'application de paramètres avec Bluetooth car il s'agit d'un lien profond vers Bluetooth.

Alix
la source
0

Testé avec iOS 10. Fonctionnement

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;
}
}

Bon codage :)

Praveen Sharma
la source
3
Votre application sera rejetée. Cela m'était arrivé.
Bersaelor
Est-ce vrai, mais cette ligne de code vous amènera directement à l'emplacement souhaité
Praveen Sharma
1
Oui, cela vous y mènera. Je ne dis pas que cela ne fonctionne pas, je souligne simplement que cela vous fera rejeter lors de l'examen de l'application. "prefs: root" est un schéma d'URL privé selon ce que l'équipe de révision nous a dit. (Vous pourriez avoir de la chance et ils ne le remarquent pas pendant un moment, nous avons eu la fonctionnalité pendant un moment et avons passé plusieurs critiques avant que le critique ne le remarque)
Bersaelor
Merci pour l'information, j'essaierais autre chose, mais pour le moment, je suis coincé dans la connectivité VPN, trouvant une solution pour cela.
Praveen Sharma
0

Pour ajouter à la réponse acceptée: (à partir de la documentation du développeur Apple) "Lorsque vous ouvrez l'URL créée à partir de cette chaîne (openSettingsURLString), le système lance l'application Paramètres et affiche les paramètres personnalisés de l'application, le cas échéant." Donc, si vous souhaitez ouvrir les paramètres de votre application, créez votre propre Settings.bundle.

Jovan Stankovic
la source
-1

Ajoutez ceci à votre 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)
            }
        }

Appelez comme ça,

YourClass.showSettingsAlert("App would like to access camera", message: "App would like to access camera desc", onVC: fromViewController, onCancel: {
  print("canceled")
})
Mohammad Zaid Pathan
la source