Configuración de inicio de iOS -> Esquema de URL de restricciones

86

Recientemente descubrí el increíble esquema de URL de configuración personalizada de iOS5 , que se puede explicar en detalle en este excelente sitio web .

Descubrí que esto funciona, dirigiendo al usuario a la aplicación Configuración desde mi aplicación:

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

Pero parece que no puede enrutarse directamente a la ruta de Restricciones a través del pathparámetro:

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

¿Alguien ha encontrado documentación sobre esto o ha podido hacer que esto funcione?

Cualquier idea sería muy apreciada. Estoy tratando de hacer que el usuario habilite las compras en la aplicación y prefiero que el usuario no haga clic manualmente en Restricciones (no es muy obvio).

kturner
fuente
2
¿Alguien sabe la URL de Touch ID & Passcode?
Fabian Köbel
1
use esto para la identificación táctil: prefs: root = TOUCHID_PASSCODE ( stackoverflow.com/questions/35410746/… )
Fabian Köbel

Respuestas:

144

COMO LA RESPUESTA DE @Nix Wang ESTO NO FUNCIONA EN IOS 10


ADVERTENCIA: Este método no funcionará para dispositivos que ejecuten iOS 5.1 y superior. Consulte el comentario de Hlung a continuación.

Es posible que el pathcomponente tenga un nombre diferente al de la sección real, pero también es posible que actualmente no pueda acceder a esa sección directamente desde una URL. Encontré una lista de posibles URL y las restricciones no están en ella, tal vez aún no se haya descubierto.

Lista de URL conocidas actualmente en la aplicación Configuración:

  • prefs: root = General & path = Acerca de
  • prefs: root = General & path = ACCESIBILIDAD
  • prefs: root = AIRPLANE_MODE
  • prefs: root = General & path = AUTOLOCK
  • prefs: root = General & path = USAGE / CELLULAR_USAGE
  • 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 = Keyboard
  • prefs: root = CASTILLO
  • prefs: root = CASTLE & path = STORAGE_AND_BACKUP
  • prefs: root = General & path = INTERNATIONAL
  • prefs: root = LOCATION_SERVICES
  • prefs: root = ACCOUNT_SETTINGS
  • prefs: root = MUSIC
  • prefs: root = MUSIC & path = EQ
  • prefs: root = MUSIC & path = VolumeLimit
  • prefs: root = General & path = Network
  • prefs: root = NIKE_PLUS_IPOD
  • prefs: root = NOTAS
  • prefs: root = NOTIFICATIONS_ID
  • prefs: root = Teléfono
  • prefs: root = Fotos
  • prefs: root = General & path = ManagedConfigurationList
  • prefs: root = General & path = Reset
  • 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 = STORE
  • prefs: root = TWITTER
  • prefs: root = General & path = USAGE
  • prefs: root = VIDEO
  • prefs: root = General & path = Network / VPN
  • prefs: root = Fondo de pantalla
  • prefs: root = WIFI
  • prefs: root = INTERNET_TETHERING
Henri Normak
fuente
54
Solo una amable advertencia, idownloadblog.com/2011/11/29/iphone-5-1-disables-shortcuts dijo que todos los esquemas de URL para la configuración de iOS se eliminarán en iOS5.1 (por lo que las URL como prefs: root = General & path = Network ya no funcionará) Por lo tanto, tenga en cuenta.
Hlung
3
No se eliminan por completo, solo tiene que poner estos enlaces URL en un botón en un UIAlertView. Así que simplemente ponga una advertencia en el UIAlertView de que la aplicación pasará a segundo plano y la configuración se abrirá y luego OK, y Cancelar, etc.
zambono
4
Ya no funciona, estaba funcionando en una de mis aplicaciones hace un tiempo, pero ya no.
zambono
5
A partir de iOS8, puede iniciar la aplicación de configuración incorporada con la URL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]
Jason Moore
2
Cualquier solución / alternativa para ios10 por favor.
ranjit.x.singh
48

A partir de iOS8, puede abrir la aplicación de configuración incorporada con:

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

La cadena de URL real es @"app-settings:". Intenté agregar diferentes secciones a la cadena ("Bluetooth", "GENERAL", etc.) pero parece que solo funciona la vinculación a la pantalla principal de Configuración. Publica una respuesta si descubres lo contrario.

Jason Moore
fuente
10
Eso es porque esa llamada en particular es la URL de inicio de configuración. Abre la configuración personalizada de la aplicación si existe. De lo contrario, simplemente abre la aplicación Configuración en la pantalla principal. developer.apple.com/library/ios/documentation/UIKit/Reference/…
JAL
1
Fantástica respuesta si su aplicación tiene configuraciones específicas que desea habilitar / deshabilitar. Todo en un solo lugar y no es necesario que el usuario navegue por la Configuración para llegar a la configuración deseada. ¡Gracias!
kyleturner
1
@ FabianKöbel, ¿pudiste encontrar uno para TouchID & Passcode?
ShayanK
1
@AspersionCast: puede usar esto: prefs: root = TOUCHID_PASSCODE ( stackoverflow.com/questions/35410746/… )
Fabian Köbel
Este parece ser el único método actualmente aprobado por Apple para iniciar la aplicación Configuración.
u2Fan
42

Si agrega el esquema de URL de preferencias a su aplicación de iOS, le permitirá usar todos esos esquemas que podríamos en iOS 5. Lo probé en iOS 9, pero creo que también funcionará en versiones anteriores.

Pedro Tôrres
fuente
Este truco solo funciona al iniciar iOS 8 donde no es necesario.
Valeriy Van
1
Pero al igual que en iOS 8, no puede abrir la configuración de WiFi, por ejemplo, si no agrega esta vergüenza de URL a su aplicación.
Pedro Tôrres
Sí, tiene usted razón. No pensé en este caso de uso.
Valeriy Van
9
@conorgriffin Para usted y cualquier otra persona que se pregunte cómo vive el entorno: Objetivos | (Aplicación) | Info | Tipos de URL | +
Kevin Sylvestre
Alguien dijo que fue rechazado por usar la URL "prefs: root". stackoverflow.com/questions/8246070/…
Hlung
33

Actualizar:

prefs: NO funcionará desde iOS 10.

Nix Wang
fuente
4
Cual es la alternativa?
OXXY
1
Eso es una locura, ya que este documento oficial de Apple ( developer.apple.com/library/ios/qa/qa1924/_index.html ) trata intencionalmente el problema de las preferencias y tiene fecha del 2/8/2016.
daspianist
1
Ese documento dice solo usarlo para la configuración del teclado (cualquier otra cosa que no sea ese uso específico es una violación)
Peter Johnson
Desafortunadamente, no parece funcionar incluso para la configuración del teclado en iOS 10.
Intricaciones
4
Si bien prefs:ya no funcionan, lo siguiente hace (al menos en la apertura general):App-Prefs::root=Settings&path=General
daspianist
22

Sí, vi esto (y muchos más), incluso lo implementé en una aplicación de prueba. Realmente necesito obtener la palabra definitiva de Apple, pero la opinión de consenso de la comunidad es que Apple lo rechazó en 5.1 después de que fue "descubierto / publicado" públicamente, por lo que las aplicaciones que lo contienen no serán aceptadas.

Actualización del 01/08/12: le pregunté a Apple a través de mi cuenta de desarrollador si hay una manera de iniciar mediante programación el cuadro de diálogo Configuración de WiFi. Aquí está la respuesta:

"Nuestros ingenieros han revisado su solicitud y han concluido que no existe una forma compatible de lograr la funcionalidad deseada dadas las configuraciones del sistema de envío actual".

Dan
fuente
9
Recomiendo a cualquiera que necesite esta función que registre un informe de error oficial. Cuanto más se informe, más visible será y habrá más posibilidades de que se presente una solución compatible en el futuro. bugreport.apple.com
Matt Connolly
18

¡En iOS 9 vuelve a funcionar!

Para abrir Configuración> General> Teclado , uso:

prefs:root=General&path=Keyboard

Además, es posible ir más allá a los teclados :

prefs:root=General&path=Keyboard/KEYBOARDS
Mikhail
fuente
Acabo de notar esto en la aplicación PopKey. Probé la URL de Configuración> Configuración de Wi-Fi y también funciona. Esperemos que esto permanezca.
Jamie McDaniel
¿Estos esquemas deben agregarse a LSApplicationQueriesSchemesen info.plist?
Warpling
2
No, no lo hacen. Solo use su método con openURL :.
Mikhail
1
Estoy tratando de usar esto para vincular a la configuración desde una página web y parece que funciona en Safari en un iPhone pero no en un iPad. Ambos están en 9.0.2. ¿En serio, Apple?
Randy H.
3
Todavía es necesario agregar el esquema de URL de preferencias al objetivo
ajuste el
7

Quería abrir el menú de Bluetooth en la aplicación de configuración y la ruta anterior (prefs: root = General & path = Bluetooth) no funcionó para mí. Lo que terminó funcionando para mí fue

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

Asegúrese de tener prefsdefinido primero el esquema de URL.

Mahesh
fuente
Esto se debe a que el menú de Bluetooth se ha movido en versiones recientes de iOS. Ahora es una configuración de nivel superior, no en General .
Nate
@Imran: Olvidaste las prefscosas.
Michael Dorner
5

Solución para iOS10. Funciona bien.

NSURL *URL = [NSURL URLWithString:@"App-prefs:root=TWITTER"];
[[UIApplication sharedApplication] openURL:URL options:@{} completionHandler:nil];
Desarrolladores pararmswar
fuente
¿Es esto legítimo? El envío exitoso de la aplicación no significa que esto sea legítimo. Puede fallar eventualmente en el futuro ..
Stas
@Stas: No, no lo es, ya que es una API privada.
Tejas K
4

A partir de iOS10 puedes usar

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

para abrir la configuración general.

También puede agregar direcciones URL conocidas (puede verlas en la respuesta más votada) para abrir configuraciones específicas. Por ejemplo, el siguiente abre touchID y contraseña.

UIApplication.sharedApplication().openURL(NSURL(string:"App-Prefs:root=TOUCHID_PASSCODE")!)
mkeremkeskin
fuente
1
"App-Prefs: root = TOUCHID_PASSCODE" no funciona en iOS 11. ¿Alguna otra solución?
mayo
App-Prefses una API privada que provocará el rechazo de la aplicación durante la revisión.
Tejas K
2

Aquí hay algo más que encontré:

  1. Después de haber definido el esquema de URL "prefs", "prefs: root = Safari & path = ContentBlockers" funciona en Simulator (iOS 9.1 en inglés ), pero no en Simulator (chino simplificado) . Simplemente salta a Safari, pero no a los Bloqueadores de contenido. Si su aplicación es internacional, tenga cuidado.
    Actualización: No sé por qué, ahora ya no puedo saltar a ContentBlockers, el mismo código, la misma versión, no funciona ahora. :(

  2. En dispositivos reales (el mío es iPhone 6S y iPad mini 2), "Safari" debería ser "SAFARI" , "Safari" no funciona en el dispositivo real, "SAFARI" ahora funciona en el simulador:

    #if arch(i386) || arch(x86_64)
        // Simulator
        let url = NSURL(string: "prefs:root=Safari")!
    #else
        // Device
        let url = NSURL(string: "prefs:root=SAFARI")!
    #endif
    
    if UIApplication.sharedApplication().canOpenURL(url) {
        UIApplication.sharedApplication().openURL(url)
    }
    
  3. Hasta el momento, no ha encontrado diferencias entre iPhone y iPad.

Kaiyuan Xu
fuente
¿Alguna vez volviste a funcionar? ¡Qué vergüenza si no!
Ryan Brodie
@RyanBrodie ¿Qué quieres decir con "qué pena"?
Kaiyuan Xu
Que es muy lamentable, sería grande para enlazar directamente en la configuración del bloqueador de contenido de Safari
Ryan Brodie
6
@RyanBrodie Incluso si pudiera funcionar, le sugiero que no lo use para las aplicaciones de la App Store en este momento, acabo de recibir un "rechazado" de iTunes Connect esta mañana, porque "prefs: root" es una API privada (hay aplicaciones usando prefs: root en App Store ... Dios sabe por qué)
Kaiyuan Xu
¡No me di cuenta de que muchas gracias por el aviso!
Ryan Brodie
2

Funciona bien para la configuración de notificación de aplicaciones en IOS 10 (probado)

if(&UIApplicationOpenSettingsURLString != nil){
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
}
Mrsantateam
fuente
2

iOS 10

Utilizar app-prefs:

App-prefs:root=MOBILE_DATA_SETTINGS_ID

Ver la esencia

Alex Hedley
fuente
0

Estoy actualizando una noticia aquí. El uso de 'prefs:' solo NO es rechazado por Apple, lo probé y verifiqué que estaba aprobado en la tienda de aplicaciones (en agosto de 2016). gracias.

KoreanXcodeWorker
fuente
Estoy usando esto [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=DO_NOT_DISTURB"]];para abrir la configuración DND del dispositivo. ¿Apple rechazará esto?
Shreyank
¿Solo pasó la revisión o también funciona? Quiero decir, ¿openURL te lleva a la configuración? No funcionó de mi lado.
Ahmet Akkök