iOS 9 no abre la aplicación Instagram con URL SCHEME

La siguiente URL se abre en iOS 8.3 y versiones anteriores, pero no funciona y iOS 9

let instagramURL = NSURL(string: "instagram://app") 

¿Por qué la URL no se abrirá?

iOS 9 ha realizado un pequeño cambio en el manejo del esquema de URL. Debe incluir en la lista blanca las URL a las que llamará su aplicación utilizando la clave LSApplicationQueriesSchemes en Info.plist .

Por favor, mira la publicación aquí: http://awkwardhare.com/post/121196006730/quick-take-on-ios-9-url-scheme-changes

La conclusión principal es que:

Si llama al método “canOpenURL” en una URL que no está en su lista blanca, devolverá “NO”, incluso si hay una aplicación instalada que se ha registrado para manejar este esquema. A Aparecerá una entrada de Syslog “Esta aplicación no puede consultar el esquema xxx”.

Si llama al método “openURL” en una URL que no está en su lista blanca, fallará de manera silenciosa. A Aparecerá una entrada de Syslog “Esta aplicación no puede consultar el esquema xxx”.

El autor también especula que esto es un error con el sistema operativo y Apple arreglará esto en una versión posterior.

Como se dijo anteriormente, desea agregar una clave en la lista de información, aquí está la lista de la mayoría de las redes sociales

 LSApplicationQueriesSchemes  fb fbapi fbauth2 fbshareextension fb-messenger-api twitter viber whatsapp wechat line instagram kakaotalk mqq vk comgooglemaps googlephotos ha  

* Los 3 primeros partidos de Facebook (FBSDK 4.6): fbapi, fbauth2, fbshareextension. “Ha” es para Snapchat

Esta es una nueva característica de seguridad de iOS 9. Vea WWDC 2015 Session 703 para más información.

Cualquier aplicación creada con SDK 9 necesita proporcionar una entrada LSApplicationQueriesSchemes en su archivo plist, declarando qué esquemas intenta consultar.

 LSApplicationQueriesSchemes  urlscheme urlscheme2 urlscheme3 urlscheme4  

Suponiendo dos aplicaciones TestA y TestB. TestB quiere consultar si TestA está instalado. “TestA” define el siguiente esquema de URL en su archivo info.plist:

 CFBundleURLTypes   CFBundleURLSchemes  testA    

La segunda aplicación “TestB” intenta averiguar si “TestA” está instalado llamando:

 [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"TestA://"]]; 

Pero esto normalmente devolverá NO en iOS9 porque se debe agregar “TestA” a la entrada LSApplicationQueriesSchemes en el archivo info.plist de TestB. Esto se hace agregando el siguiente código al archivo info.plist de TestB:

 LSApplicationQueriesSchemes  TestA  

Puede encontrar una implementación en funcionamiento aquí: https://github.com/gatzsche/LSApplicationQueriesSchemes-Working-Example

De, Sesión 703 WWDC 2015:

Puede continuar utilizando los esquemas de URL cuando construya su aplicación para iOS 9 y desee llamar a los esquemas de URL, ahora deberá declararlos en su Info.plist de aplicaciones. Hay una nueva clave, LSApplicationQueriesSchemes , y aquí necesitarás agregar la lista de esquemas que deseas son canOpenURL activada.

Por ejemplo, en caso de FB

El uso compartido de Facebook desde un diálogo compartido falla incluso con @Matthieu answer (que es 100% correcto para el rest de las URL sociales). Tuve que agregar un conjunto de URL que revertí desde Facebook SDK.

  fbapi fbauth2 fbshareextension fb-messenger-api twitter whatsapp wechat line instagram kakaotalk mqq vk comgooglemaps fbapi20130214 fbapi20130410 fbapi20130702 fbapi20131010 fbapi20131219 fbapi20140410 fbapi20140116 fbapi20150313 fbapi20150629  

Es importante tener en cuenta que hubo un error con los teléfonos jailbreak en 9.0.x que rompió esquemas de URL. Si está ejecutando un dispositivo con jailbreak, asegúrese de actualizar Patcyh en Cydia

Bueno, puedes abrir una aplicación llamando a openURL: o openURL:options:completionHandler: (iOS 10 en adelante) directamente sin hacer la verificación condicional canOpenURL: Lea la sección de discusión en el documento de Apple para canOpenURL: método que dice:

el método openURL: no está limitado por el requisito LSApplicationQueriesSchemes .

No parece que nadie haya abordado cómo especificar URL con parámetros integrados. Cualquier URL que contenga parámetros, no será posible especificar la URL específica en LSApplicationsQueriesSchemes. Por ejemplo, supongamos que tengo una aplicación de correo electrónico que pasa la dirección de correo electrónico de los remitentes:

 myemail://mailto?bob@gmail.com 

La única forma en que parece hacer que funcione en iOS9 es eliminar cualquier parámetro.

Apple cambió el método canOpenURL en iOS 9. Las aplicaciones que están comprobando los Esquemas de URL en iOS 9 e iOS 10 tienen que declarar estos Esquemas a medida que se envían a Apple.

Para PayPal, agregue los siguientes esquemas de URL:

enter image description here

Referir este enlace

Swift 3.1, Swift 3.2, Swift 4

 if let urlFromStr = URL(string: "instagram://app") { if UIApplication.shared.canOpenURL(urlFromStr) { if #available(iOS 10.0, *) { UIApplication.shared.open(urlFromStr, options: [:], completionHandler: nil) } else { UIApplication.shared.openURL(urlFromStr) } } } 

Añádalos en Info.plist:

 LSApplicationQueriesSchemes  instagram  

Cuando traté de llamar a Facebook desde mi propia aplicación hoy, descubrí que no hay una clave LSApplicationQueriesSchemes que pueda agregar a Info.plist (Xcode Version 8.2.1 (8C1002)). Abrí Info.plist con Sublime Text y lo agregué manualmente al archivo, luego funcionó. Solo para hacerle saber que si no puede encontrar la clave, simplemente agréguela usted mismo.