¿Cómo abrir Configuración mediante progtwigción en la aplicación de Facebook?

Necesito abrir Configuración programáticamente desde mi aplicación. Busqué en SO, pero en todas partes la gente dice que es imposible. Pero hoy vi que está implementado en la aplicación de Facebook. Hay un botón en un UIAlertView y cuando hace clic en él, abre la Configuración. Entonces, de hecho, esto es posible para abrir Configuración, he sido testigo de esto yo mismo. Pero, ¿cómo hacer eso? ¿Alguien sabe cómo Facebook hace eso?

No puedes, no hay una llamada API para hacer esto.

Solo los diálogos del sistema, los cuadros de diálogo de Apple Frameworks, pueden abrir la aplicación de configuración. En iOS 5, había un esquema de aplicación de URL para abrir el diálogo del sistema, pero Apple lo eliminó más tarde.


Con la llegada de iOS 8 puede abrir el cuadro de diálogo de configuración en su página de aplicaciones.

 if (&UIApplicationOpenSettingsURLString != NULL) { NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; [[UIApplication sharedApplication] openURL:url]; } else { // Present some dialog telling the user to open the settings app. } 

¡En iOS 8 puedes abrir Configuración programáticamente!

Aquí está el código:

 - (void)openSettings { BOOL canOpenSettings = (&UIApplicationOpenSettingsURLString != NULL); if (canOpenSettings) { NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; [[UIApplication sharedApplication] openURL:url]; } } 

Si su aplicación tiene su propio paquete de configuraciones, la configuración se abrirá mostrando la configuración de su aplicación. Si su aplicación no tiene un paquete de configuración, se mostrará la página de configuración principal.

¡En iOS 8 puedes abrir Configuración programáticamente!

Aquí está la lista de URL conocidas actualmente en la aplicación Configuración:

 - (void) openSettings { if (&UIApplicationOpenSettingsURLString != nil) [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]; else NSLog(@"UIApplicationOpenSettingsURLString is not available in current iOS version"); } 
  • prefs: root = General & path = Acerca de
  • prefs: root = General & path = ACCESIBILIDAD
  • prefs: root = AIRPLANE_MODE
  • prefs: root = General & path = AUTOLOCK
  • prefs: root = General & path = USO / USO CELULAR
  • prefs: root = Brillo
  • prefs: root = General & path = Bluetooth
  • prefs: root = General & path = DATE_AND_TIME
  • prefs: root = FACETIME
  • prefs: root = General
  • prefs: root = General & path = Teclado
  • prefs: root = CASTILLO
  • Preferencias: root = CASTLE & path = STORAGE_AND_BACKUP
  • prefs: root = General & path = INTERNACIONAL
  • prefs: root = LOCATION_SERVICES
  • prefs: root = ACCOUNT_SETTINGS
  • prefs: root = MÚSICA
  • prefs: root = MUSIC & path = EQ
  • prefs: root = MUSIC & path = VolumeLimit
  • prefs: root = General & path = Network
  • prefs: root = NIKE_PLUS_IPOD
  • prefs: root = NOTES
  • prefs: root = NOTIFICATIONS_ID
  • prefs: root = Teléfono
  • prefs: root = Fotos
  • prefs: root = General & path = ManagedConfigurationList
  • prefs: root = General & path = Restablecer
  • prefs: root = Sonidos y ruta = Tono de llamada
  • prefs: root = Safari
  • prefs: root = General & path = Asistente
  • prefs: root = Sonidos
  • prefs: root = General & path = SOFTWARE_UPDATE_LINK
  • prefs: root = TIENDA
  • prefs: root = TWITTER
  • prefs: root = General & path = USO
  • prefs: root = VIDEO
  • prefs: root = General & path = Red / VPN
  • prefs: root = Fondo de escritorio
  • Preferencias: root = WIFI
  • prefs: root = INTERNET_TETHERING

La respuesta de Vito Ziv en Swift.

 func openSettings() { UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!, completionHandler: nil) } 

La alerta en la aplicación de Facebook a la que se refiere esta pregunta es una alerta estándar que iOS muestra cuando configura UIRequiresPersistentWiFi en SÍ en sus archivos Info.plist y el usuario inicia su aplicación sin una conexión de red.

Para resumir la discusión aquí:

  • No hay una URL que pueda usar para llegar al nivel raíz de la aplicación de Configuración.
  • Puede enviar al usuario a la sección de su aplicación de Configuración usando UIApplicationOpenSettingsURLString en iOS 8.
  • Su aplicación puede mostrar la misma alerta que Facebook , que abre el nivel raíz de la aplicación Configuración, configurando UIRequiresPersistentWiFi en SÍ.
  if (&UIApplicationOpenSettingsURLString != NULL) 

en iOS 8+ siempre es VERDADERO. Entonces puedes editar así

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

(con el nuevo openURL para iOS 10)

Si desea abrir la configuración de la aplicación, necesita el método de escritura con UIApplicationOpenSettingsURLString.

 fileprivate func openSettings() { UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!) } 

Si necesita abrirá una de muchas configuraciones, necesita usar esta función

 fileprivate func openSettings() { UIApplication.shared.open(URL(string:"App-Prefs:root=General")!) } 

Para abrir la configuración de nuestra propia aplicación en iOS 8 and later , use el siguiente código.

 - (void) openSettings { if(&UIApplicationOpenSettingsURLString != nil) [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]; else NSLog(@"UIApplicationOpenSettingsURLString is not available in current iOS version"); } 

Para referencia y descripción detallada, por favor siga

Abrir la aplicación de configuración mediante progtwigción en iOS 8

  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) { }]; } 

Aquí hay un ejemplo de Swift 3 con UIAlertController y 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) } 

Un memo sobre prefs:root= y Prefs:root .

Sí, nuestra aplicación fue RECHAZADA por Apple debido a las prefs:root= y App-Prefs:root esquema de URL App-Prefs:root hoy (2018-06-29) . Ellos son API privados.

Rechazado por Apple


Para Swift 4,

Solo UIApplication.openSettingsURLString es una API pública para abrir Configuración.

Si está usando Swift 3 esta es la syntax

 UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!, options: [:]) { (success) in if success { print("settings opened"); } } 
 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 } 

Abrir la configuración de privacidad en la aplicación

En lugar de usar prefs: , solo usa App-Prefs:

 if ([[UIApplication sharedApplication] canOpenURL: [NSURL URLWithString: @"App-Prefs:root=WIFI"]]) { [[UIApplication sharedApplication] openURL: [NSURL URLWithString:@"App-Prefs:root=WIFI"]]; } 

.

Todo está aquí: https://medium.com/@thanhvtrn/how-to-open-settings-wifi-in-swift-on-ios-10-1d94cf2c2e60

SWIFT 3

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