usar restringir qué pueden para móviles moviles los determinar desactivar datos configurar como bloquear aplicaciones aplicacion algunas ios swift settings

ios - restringir - determinar qué aplicaciones pueden usar datos móviles en android



¿Cómo abro la configuración del teléfono cuando hago clic en un botón? (13)

Agregando a @Luca Davanzo

iOS 11, algunas configuraciones de permisos se han movido a la ruta de la aplicación:

Soporte para iOS 11

static func open(_ preferenceType: PreferenceType) throws { var preferencePath: String if #available(iOS 11.0, *), preferenceType == .video || preferenceType == .locationServices || preferenceType == .photos { preferencePath = UIApplicationOpenSettingsURLString } else { preferencePath = "/(PreferencesExplorer.preferencePath)=/(preferenceType.rawValue)" } if let url = URL(string: preferencePath) { if #available(iOS 10.0, *) { UIApplication.shared.open(url, options: [:], completionHandler: nil) } else { UIApplication.shared.openURL(url) } } else { throw PreferenceExplorerError.notFound(preferencePath) } }

Estoy tratando de implementar una función en una aplicación que muestra una alerta cuando la conexión a Internet no está disponible. La alerta tiene dos acciones (Aceptar y Configuración), cada vez que un usuario hace clic en la configuración, quiero llevarla a la configuración del teléfono mediante programación.

Estoy usando Swift y Xcode.


Como arriba @niravdesai dijo App-prefs. Descubrí que App-Prefs: funciona para dispositivos iOS 9, 10 y 11. probados. donde como prefs: solo funciona en iOS 9.


En iOS 8+ puedes hacer lo siguiente:

func buttonClicked(sender:UIButton) { UIApplication.sharedApplication().openURL(NSURL(string: UIApplicationOpenSettingsURLString)) }

Swift 4

let settingsUrl = URL(string: UIApplicationOpenSettingsURLString)! UIApplication.shared.open(settingsUrl)


He visto esta linea de codigo

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

no funciona, no funcionó para mí en ios10 / Xcode 8, solo una pequeña diferencia de código, reemplace esto con

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

Swift3

UIApplication.shared.openURL(URL(string:"prefs:root=General")!)

Reemplazar con

UIApplication.shared.openURL(URL(string:"App-Prefs:root=General")!)

Espero eso ayude. Salud.


La primera respuesta de los esquemas de URL específicos de la aplicación funcionó para mí en iOS 10.3.

if let appSettings = URL(string: UIApplicationOpenSettingsURLString + Bundle.main.bundleIdentifier!) { if UIApplication.shared.canOpenURL(appSettings) { UIApplication.shared.open(appSettings) } }


Usando UIApplication.openSettingsURLString

Actualización para Swift 5.1

override func viewDidAppear(_ animated: Bool) { let alertController = UIAlertController (title: "Title", message: "Go to Settings?", preferredStyle: .alert) let settingsAction = UIAlertAction(title: "Settings", style: .default) { (_) -> Void in guard let settingsUrl = URL(string: UIApplication.openSettingsURLString) else { return } if UIApplication.shared.canOpenURL(settingsUrl) { UIApplication.shared.open(settingsUrl, completionHandler: { (success) in print("Settings opened: /(success)") // Prints true }) } } alertController.addAction(settingsAction) let cancelAction = UIAlertAction(title: "Cancel", style: .default, handler: nil) alertController.addAction(cancelAction) present(alertController, animated: true, completion: nil) }

Swift 4.2

override func viewDidAppear(_ animated: Bool) { let alertController = UIAlertController (title: "Title", message: "Go to Settings?", preferredStyle: .alert) let settingsAction = UIAlertAction(title: "Settings", style: .default) { (_) -> Void in guard let settingsUrl = URL(string: UIApplicationOpenSettingsURLString) else { return } if UIApplication.shared.canOpenURL(settingsUrl) { UIApplication.shared.open(settingsUrl, completionHandler: { (success) in print("Settings opened: /(success)") // Prints true }) } } alertController.addAction(settingsAction) let cancelAction = UIAlertAction(title: "Cancel", style: .default, handler: nil) alertController.addAction(cancelAction) present(alertController, animated: true, completion: nil) }


Usando la sugerencia de @vivek, desarrollo una clase de utilidades basada en Swift 3 , ¡espero que lo aprecies!

import Foundation import UIKit public enum PreferenceType: String { case about = "General&path=About" case accessibility = "General&path=ACCESSIBILITY" case airplaneMode = "AIRPLANE_MODE" case autolock = "General&path=AUTOLOCK" case cellularUsage = "General&path=USAGE/CELLULAR_USAGE" case brightness = "Brightness" case bluetooth = "Bluetooth" case dateAndTime = "General&path=DATE_AND_TIME" case facetime = "FACETIME" case general = "General" case keyboard = "General&path=Keyboard" case castle = "CASTLE" case storageAndBackup = "CASTLE&path=STORAGE_AND_BACKUP" case international = "General&path=INTERNATIONAL" case locationServices = "LOCATION_SERVICES" case accountSettings = "ACCOUNT_SETTINGS" case music = "MUSIC" case equalizer = "MUSIC&path=EQ" case volumeLimit = "MUSIC&path=VolumeLimit" case network = "General&path=Network" case nikePlusIPod = "NIKE_PLUS_IPOD" case notes = "NOTES" case notificationsId = "NOTIFICATIONS_ID" case phone = "Phone" case photos = "Photos" case managedConfigurationList = "General&path=ManagedConfigurationList" case reset = "General&path=Reset" case ringtone = "Sounds&path=Ringtone" case safari = "Safari" case assistant = "General&path=Assistant" case sounds = "Sounds" case softwareUpdateLink = "General&path=SOFTWARE_UPDATE_LINK" case store = "STORE" case twitter = "TWITTER" case facebook = "FACEBOOK" case usage = "General&path=USAGE" case video = "VIDEO" case vpn = "General&path=Network/VPN" case wallpaper = "Wallpaper" case wifi = "WIFI" case tethering = "INTERNET_TETHERING" case blocked = "Phone&path=Blocked" case doNotDisturb = "DO_NOT_DISTURB" }

enum PreferenceExplorerError: Error { case notFound(String) } open class PreferencesExplorer { // MARK: - Class properties - static private let preferencePath = "App-Prefs:root" // MARK: - Class methods - static func open(_ preferenceType: PreferenceType) throws { let appPath = "/(PreferencesExplorer.preferencePath)=/(preferenceType.rawValue)" if let url = URL(string: appPath) { if #available(iOS 10.0, *) { UIApplication.shared.open(url, options: [:], completionHandler: nil) } else { UIApplication.shared.openURL(url) } } else { throw PreferenceExplorerError.notFound(appPath) } } }

¡Esto es muy útil ya que las API cambiarán con seguridad y puede refactorizar una vez y muy rápido!


advertencia: los prefs:root o App-Prefs:root esquemas de URL App-Prefs:root se consideran API privadas. Apple puede rechazar su aplicación si la usa, esto es lo que puede obtener al enviar su aplicación:

Su aplicación utiliza el esquema de URL no público "prefs: root =", que es una entidad privada. El uso de API no públicas no está permitido en la App Store porque puede conducir a una experiencia de usuario deficiente en caso de que estas API cambien. Continuar usando u ocultando API no públicas en futuras presentaciones de esta aplicación puede dar como resultado la cancelación de su cuenta de desarrollador de Apple, así como la eliminación de todas las aplicaciones asociadas de la App Store.

Próximos pasos

Para resolver este problema, revise su aplicación para proporcionar la funcionalidad asociada usando API públicas o elimine la funcionalidad usando el esquema de URL "prefs: root" o "App-Prefs: root".

Si no hay alternativas para proporcionar la funcionalidad que requiere su aplicación, puede presentar una solicitud de mejora.


en ios10 / Xcode 8 en el simulador:

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

trabajos

UIApplication.shared.openURL(URL(string:"prefs:root=General")!)

no.


App-Prefs:root=Privacy&path=LOCATION funcionó para mí para llegar a la configuración general de ubicación. Nota: solo funciona en un dispositivo.


SWIFT 4

Esto podría tomar la configuración específica de su aplicación, si eso es lo que está buscando.

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


Swift 4.2, iOS 12

El método open(url:options:completionHandler:) se ha actualizado para incluir un diccionario de opciones no nulo, que a partir de esta publicación solo contiene una opción posible del tipo UIApplication.OpenExternalURLOptionsKey (en el ejemplo).

@objc func openAppSpecificSettings() { guard let url = URL(string: UIApplication.openSettingsURLString), UIApplication.shared.canOpenURL(url) else { return } let optionsKeyDictionary = [UIApplication.OpenExternalURLOptionsKey(rawValue: "universalLinksOnly"): NSNumber(value: true)] UIApplication.shared.open(url, options: optionsKeyDictionary, completionHandler: nil) }

Al construir explícitamente una URL, como con "App-Prefs", AFAIK ha rechazado algunas aplicaciones de la tienda.


Swift 5

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

Swift 4

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

NOTA: El siguiente método funciona para todas las versiones inferiores a iOS 11, para versiones superiores la aplicación podría ser rechazada ya que es una API privada

A veces, queremos llevar a un usuario a configuraciones distintas de la configuración de nuestra aplicación. El siguiente método lo ayudará a lograrlo:

Primero, configure los esquemas de URL en su proyecto. Lo encontrará en Target -> Información -> Esquema de URL. haga clic en el botón + y escriba prefs en esquemas de URL

Swift 3

UIApplication.shared.open(URL(string:"App-Prefs:root=General")!, options: [:], completionHandler: nil)

Rápido

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

C objetivo

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

y las siguientes son todas las URL disponibles

  • prefs: root = General & path = Acerca de
  • prefs: root = General y ruta = ACCESIBILIDAD
  • prefs: root = AIRPLANE_MODE
  • prefs: root = General & path = AUTOLOCK
  • prefs: root = General & path = USAGE / CELLULAR_USAGE
  • prefs: root = Brillo
  • prefs: root = Bluetooth
  • prefs: root = General & path = DATE_AND_TIME
  • prefs: root = FACETIME
  • prefs: root = General
  • prefs: root = General & ruta = Teclado
  • prefs: root = CASTILLO
  • prefs: root = CASTILLO & ruta = STORAGE_AND_BACKUP
  • prefs: root = General y ruta = INTERNACIONAL
  • prefs: root = LOCATION_SERVICES
  • prefs: root = ACCOUNT_SETTINGS
  • prefs: root = MÚSICA
  • prefs: root = MÚSICA & ruta = EQ
  • prefs: root = MÚSICA & ruta = VolumeLimit
  • prefs: root = General & ruta = Red
  • prefs: root = NIKE_PLUS_IPOD
  • prefs: root = NOTAS
  • prefs: root = NOTIFICACIONES_ID
  • prefs: root = Teléfono
  • prefs: root = Fotos
  • prefs: root = General & path = ManagedConfigurationList
  • prefs: root = General y ruta = Restablecer
  • prefs: root = Sonidos y ruta = Tono de llamada
  • prefs: root = Safari
  • prefs: root = General & ruta = Asistente
  • prefs: root = Sonidos
  • prefs: root = General & path = SOFTWARE_UPDATE_LINK
  • prefs: root = TIENDA
  • prefs: root = TWITTER
  • prefs: root = FACEBOOK
  • prefs: root = General & path = USAGE prefs: root = VIDEO
  • prefs: root = General y ruta = Red / VPN
  • prefs: root = fondo de pantalla
  • prefs: root = WIFI
  • prefs: root = INTERNET_TETHERING
  • prefs: root = Phone & path = Bloqueado
  • prefs: root = DO_NOT_DISTURB

Nota: La configuración de red no se abrirá en un simulador, pero el enlace funcionará en un dispositivo real.