Ich muss Einstellungen programmgesteuert in meiner App öffnen. Ich habe über SO gesucht, aber überall sagen Leute, dass es unmöglich ist. Aber heute habe ich gesehen, dass es in der Facebook-App implementiert ist. Es gibt eine Schaltfläche auf einem UIAlertView
und wenn Sie darauf klicken, öffnen Sie die Einstellungen. Es ist also tatsächlich möglich, Einstellungen zu öffnen. Ich habe dies selbst gesehen. Aber wie geht das? Weiß jemand, wie Facebook das macht?
ios
objective-c
Andrey Chernukha
quelle
quelle
Antworten:
Sie können nicht, es gibt keinen API-Aufruf, um dies zu tun.
Nur Systemdialoge, Dialoge von Apple Frameworks, können die Einstellungs-App öffnen. In iOS 5 gab es ein App-URL-Schema zum Öffnen des Systemdialogs, das Apple jedoch später entfernte.
Mit iOS 8 können Sie den Einstellungsdialog auf Ihrer Apps-Seite öffnen.
if (&UIApplicationOpenSettingsURLString != NULL) { NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; [[UIApplication sharedApplication] openURL:url]; } else { // Present some dialog telling the user to open the settings app. }
quelle
Unter iOS 8 können Sie Einstellungen programmgesteuert öffnen!
Hier ist der Code:
- (void)openSettings { BOOL canOpenSettings = (&UIApplicationOpenSettingsURLString != NULL); if (canOpenSettings) { NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; [[UIApplication sharedApplication] openURL:url]; } }
Wenn Ihre App über ein eigenes Einstellungspaket verfügt, werden die Einstellungen mit den Einstellungen Ihrer App geöffnet. Wenn Ihre App kein Einstellungspaket hat, wird die Seite mit den Haupteinstellungen angezeigt.
quelle
Unter iOS 8 können Sie Einstellungen programmgesteuert öffnen!
Hier ist die Liste der derzeit bekannten URLs in der Einstellungen-App:
- (void) openSettings { if (&UIApplicationOpenSettingsURLString != nil) [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]; else NSLog(@"UIApplicationOpenSettingsURLString is not available in current iOS version"); }
quelle
Location Services
.Vito Zivs Antwort in Swift.
func openSettings() { UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!, completionHandler: nil) }
quelle
Die Warnung in der Facebook-App, auf die sich diese Frage bezieht, ist eine Standardwarnung, die iOS selbst anzeigt, wenn Sie UIRequiresPersistentWiFi in Ihren Info.plist-Dateien auf YES setzen und der Benutzer Ihre App ohne Netzwerkverbindung startet.
Um die Diskussion hier zusammenzufassen:
quelle
settings.bundle
für Ihre App bereitstellen ? Ich stelle fest, dass diese URL beim Start über Xcode zur Seite mit den Einstellungen der obersten Ebene führt. Aber wenn ich über TestFlight gehe, gehe ich zu meiner untergeordneten Seite mit den (leeren) App-Einstellungen. Aber ich habe keine erstelltsettings.bundle
, und es gibt keine in meinem.app
Produkt ...UIRequiresPersistentWiFi
ist das, wonach ich gesucht habe, um die Warnung anzuzeigen. Weiß jedoch jemand, ob Sie es zur Laufzeit programmgesteuert auslösen können, anstatt die info.plist zu verwenden? @Richard Venable, wenn es eine Methode gibt, die Sie aufrufen können, damit Sie diese tatsächlich nutzen können, wenn Sie auf eine bestimmte Schaltfläche klicken?Ein Memo über
prefs:root=
undPrefs:root
.Ja, unsere App wurde von Apple ABGELEHNT wegen
prefs:root=
undApp-Prefs:root
heute URL - Schema(2018-06-29)
. Sie sind private API.Für Swift 4
Nur UIApplication.openSettingsURLString ist eine öffentliche API zum Öffnen von Einstellungen.
quelle
UIApplication.openSettingsURLString
jetzt und bitte meinen Chef, die UI-Spezifikation für dieses Problem zu ändern.if (&UIApplicationOpenSettingsURLString != NULL)
in iOS 8+ ist immer WAHR. So können Sie so bearbeiten
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; if ([[UIApplication sharedApplication] canOpenURL:url]) { [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil]; }
(mit neuem openURL für iOS 10)
quelle
Wenn Sie offene Anwendungseinstellungen wünschen, benötigen Sie eine Schreibmethode mit UIApplicationOpenSettingsURLString.
fileprivate func openSettings() { UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!) }
Wenn Sie eine von vielen Einstellungen öffnen müssen, müssen Sie diese Funktion verwenden
fileprivate func openSettings() { UIApplication.shared.open(URL(string:"App-Prefs:root=General")!) }
quelle
iOS 8 and later
Verwenden Sie den folgenden Code, um Einstellungen unserer eigenen Anwendung in zu öffnen .- (void) openSettings { if(&UIApplicationOpenSettingsURLString != nil) [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]; else NSLog(@"UIApplicationOpenSettingsURLString is not available in current iOS version"); }
Als Referenz und detaillierte Beschreibung folgen Sie bitte
Programmgesteuertes Öffnen der Einstellungen-App in iOS 8
quelle
if (&UIApplicationOpenSettingsURLString != NULL) { UIAlertView_Blocks *alertView = [[UIAlertView_Blocks alloc] initWithTitle:NSLocalizedString(@"Camera Access Denied", nil) message:NSLocalizedString(@"You must allow camera access in Settings", nil) delegate:nil cancelButtonTitle:NSLocalizedString(@"Cancel", nil) otherButtonTitles:NSLocalizedString(@"Open Settings", nil), nil]; [alertView showWithDissmissBlock:^(NSInteger buttonIndex) { if (alertView.cancelButtonIndex != buttonIndex) { NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; [[UIApplication sharedApplication] openURL:url]; } }]; } else { UIAlertView_Blocks *alertView = [[UIAlertView_Blocks alloc] initWithTitle:NSLocalizedString(@"Camera Access Denied", nil) message:NSLocalizedString(@"You must allow camera access in Settings > Privacy > Camera", nil) delegate:nil cancelButtonTitle:NSLocalizedString(@"OK", nil) otherButtonTitles:nil, nil]; [alertView showWithDissmissBlock:^(NSInteger buttonIndex) { }]; }
quelle
Hier ist ein Swift 3-Beispiel mit UIAlertController und UIAlertAction.
func showSettingsPopup() { let alertVC = UIAlertController(title: "Notifications disabled", message: "Please, turn on notifications if you want to receive a reminder messages.", preferredStyle: .alert) let close = UIAlertAction(title: "Close", style: .destructive, handler: { (action) in print("close action handler") }) let openSettings = UIAlertAction(title: "Open settings", style: .default, handler: { (action) in guard let settingsUrl = URL(string: UIApplicationOpenSettingsURLString) else { return } if UIApplication.shared.canOpenURL(settingsUrl) { UIApplication.shared.open(settingsUrl, completionHandler: { (success) in print("Settings are opened: \(success)") }) } }) alertVC.addAction(openSettings) alertVC.addAction(close) present(alertVC, animated: true, completion: nil) }
quelle
if #available(iOS 10.0, *) { if let url = URL(string: "App-Prefs:root=Privacy") { UIApplication.shared.open(url, completionHandler: .none) } } else { // Fallback on earlier versions }
Öffnen der Datenschutzeinstellungen in der App
quelle
Anstatt zu verwenden
prefs:
, verwenden Sie einfachApp-Prefs:
if ([[UIApplication sharedApplication] canOpenURL: [NSURL URLWithString: @"App-Prefs:root=WIFI"]]) { [[UIApplication sharedApplication] openURL: [NSURL URLWithString:@"App-Prefs:root=WIFI"]]; }
.
Alles ist hier: https://medium.com/@thanhvtrn/how-to-open-settings-wifi-in-swift-on-ios-10-1d94cf2c2e60
quelle
In vielen der hier gegebenen Antworten sehe ich die Verwendung von "App-Prefs: root" "prefs: root". Wir sollten diese nicht in unseren Apps verwenden, um die Einstellungs-App zu öffnen. Laut Apple ist dies ein nicht öffentliches URL-Schema. Wenn wir es verwenden, wird unsere App abgelehnt.
quelle
SWIFT 3
UIApplication.shared.openURL(URL(string: UIApplicationOpenSettingsURLString)!)
quelle