¿Qué error estás recibiendo? Esta no es una pregunta sobre xcode .
JAL
Falla "si UIApplication.sharedApplication (). CanOpenURL (instagramURL!)" La comprobación
Sk.Azad
Por favor, vea el artículo aquí: awkwardhare.com/post/121196006730/... En iOS 9 debe especificar qué URL esquemas de su aplicación está buscando (no he hecho esto por mí mismo)
thelaws
3
Agregue esto a su archivo info.plist <key> LSApplicationQueriesSchemes </key> <array> <string> URLScma1 </string> <string> URLScma2 </string> <string> URLScma3 </string> </array>
Kamleshwar
Respuestas:
210
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 LSApplicationQueriesSchemesclave en su Info.plist.
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 haya registrado para manejar este esquema. Aparecerá la 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á en silencio. Aparecerá la 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 lo solucionará en una versión posterior.
Como punto de aclaración, NO incluya ": //" en la cadena de una aplicación específica que se incluirá en la lista blanca en la matriz LSApplicationQueriesSchemes, es decir, "comgooglemaps: //". Si incluye ": //" canOpenUrl: devolverá NO y proporcionará "syslog / error" Esta aplicación no puede consultar el esquema xxx ". Sin embargo, cuando realiza la llamada real de canOpenUrl: aún debe incluir los dos puntos, es decir, canOpenUrl: @ "comgooglemaps:".
EmphaticArmPump
55
Apple, de hecho, solucionó esto en una actualización reciente. -openURL:siempre funciona aunque -canOpenURL:sea limitado.
Tim Johnsen el
¿Cuál es el punto de esto? ¿Dónde está la seguridad si puedo enumerar todo en el plist y aún consultarlo?
Maciej Swic
@MaciejSwic Una razón es que no puede cambiar la lista sin volver a enviarla a Apple.
leyes
Tenga en cuenta que todo eso está relacionado con aplicaciones compiladas solo contra iOS SDK 9. "Si no está compilando con iOS SDK 9.0, su aplicación está limitada a 50 esquemas distintos (las llamadas a canOpenURL luego devuelven NO)", como se especifica en developers.facebook.com/docs/ios/ios9
mkll
158
Como se dijo anteriormente, desea agregar una clave en la lista de información, aquí está la lista para la mayoría de las redes sociales
Casi bueno. En octubre de 2015, tuve algunos fallos con URL extrañas de los cuadros de diálogo de Facebook. Los agregué como respuesta, siéntase libre de agregarlo al suyo, lo que de hecho es correcto.
elbuild
1
y Ha://add/[username]para agregar amigos a Snapchat en Swift 3
EssamSoft
87
Esta es una nueva característica de seguridad de iOS 9. Vea WWDC 2015 Session 703 para obtener más información.
Cualquier aplicación creada con SDK 9 debe proporcionar una LSApplicationQueriesSchemesentrada en su archivo plist, declarando qué esquemas intenta consultar.
Para dejar las cosas claras. ¿Esto descartará esas aplicaciones que permiten al usuario ingresar su propio esquema de URL + ejecutar eso?
Jonny
@ Jonny No, porque aún puedes intentar abrir cualquier URL usando openURL:. Y le dirá si la apertura fue exitosa o no.
Leo Natan
Sí, pero canOpenURL no se puede usar, por lo que no podemos decirle al usuario si funcionará o no, solo tiene que intentarlo por sí mismo.
Jonny
Quiero abrir Google Maps, ¿qué debo poner en el esquema de URL?
coding22
25
Asumiendo dos aplicaciones TestA y TestB. TestB quiere consultar si TestA está instalado. "TestA" define el siguiente esquema de URL en su archivo info.plist:
Pero esto normalmente devolverá NO en iOS9 porque "TestA" debe agregarse 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:
espera, ¿no debería ser el valor de cadena de la clave LSApplicationQueriesSchemes como "testA" en into.plist de la aplicación TestB?
Nik Yekimov
22
De la sesión 703 WWDC 2015:
Puede seguir utilizando esquemas de URL cuando cree su aplicación para iOS 9 y desee llamar a esquemas de URL, ahora deberá declararlos en la lista de aplicaciones Info.plist. Hay una nueva clave, LSApplicationQueriesSchemesy aquí deberá agregar la lista de esquemas en los que desea que canOpenURL esté activado.
Si, no es eso. Todavía no funcionará comgooglemaps, incluso con info.plist
Radu
¿Encontraste una solución para esto?
Salman Hasrat Khan
1
Una imagen vale más que 1000 palabras. Gracias por la captura de pantalla. Era todo lo que necesitaba.
sean808080
3
El uso compartido de Facebook desde un diálogo compartido falla incluso con la respuesta @Matthieu (que es 100% correcta para el resto de las URL sociales). Tuve que agregar un conjunto de URL que revertí del SDK de Facebook.
Es importante tener en cuenta que hubo un error con los teléfonos con jailbreak en 9.0.x que rompió los esquemas de URL. Si está ejecutando un dispositivo con jailbreak, asegúrese de actualizar Patcyh en Cydia
Bueno, puede abrir una aplicación llamando 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 Apple doc para canOpenURL: método que dice:
El método openURL: no está limitado por el LSApplicationQueriesSchemesrequisito.
No parece que nadie haya abordado cómo especificar URL con parámetros incrustados. Cualquier URL que contenga parámetros no será posible especificar la URL específica en LSApplicationsQueriesSchemes. Por ejemplo, suponga que tengo una aplicación de correo electrónico que pasa la dirección de correo electrónico del remitente:
¿Eh? Lo que debe agregar en el plist es myemail. Los parámetros no juegan ningún papel aquí.
Leo Natan
0
Apple cambió el método canOpenURL en iOS 9. Las aplicaciones que están buscando esquemas de URL en iOS 9 e iOS 10 tienen que declarar estos esquemas a medida que se envían a Apple.
Cuando intenté llamar a Facebook desde mi propia aplicación hoy, descubrí que no hay una LSApplicationQueriesSchemesclave que pueda agregar a Info.plist(Xcode Versión 8.2.1 (8C1002)). Lo abrí Info.plistcon 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.
+canOpenURL:
devuelve?Respuestas:
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
LSApplicationQueriesSchemes
clave en suInfo.plist
.Consulte la publicación aquí: http://awkwardhare.com/post/121196006730/quick-take-on-ios-9-url-scheme-changes
La conclusión principal es que:
El autor también especula que esto es un error con el sistema operativo y Apple lo solucionará en una versión posterior.
fuente
-openURL:
siempre funciona aunque-canOpenURL:
sea limitado.Como se dijo anteriormente, desea agregar una clave en la lista de información, aquí está la lista para la mayoría de las redes sociales
* Los primeros 3 partidos de Facebook (FBSDK 4.6): fbapi, fbauth2, fbshareextension. "Ha" es para snapchat
fuente
Ha://add/[username]
para agregar amigos a Snapchat en Swift 3Esta es una nueva característica de seguridad de iOS 9. Vea WWDC 2015 Session 703 para obtener más información.
Cualquier aplicación creada con SDK 9 debe proporcionar una
LSApplicationQueriesSchemes
entrada en su archivo plist, declarando qué esquemas intenta consultar.fuente
openURL:
. Y le dirá si la apertura fue exitosa o no.Asumiendo dos aplicaciones TestA y TestB. TestB quiere consultar si TestA está instalado. "TestA" define el siguiente esquema de URL en su archivo info.plist:
La segunda aplicación "TestB" intenta averiguar si "TestA" está instalado llamando a:
Pero esto normalmente devolverá NO en iOS9 porque "TestA" debe agregarse 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:
Puede encontrar una implementación funcional aquí: https://github.com/gatzsche/LSApplicationQueriesSchemes-Working-Example
fuente
De la sesión 703 WWDC 2015:
fuente
El uso compartido de Facebook desde un diálogo compartido falla incluso con la respuesta @Matthieu (que es 100% correcta para el resto de las URL sociales). Tuve que agregar un conjunto de URL que revertí del SDK de Facebook.
fuente
En Swift 4.2 y Xcode 10.1
En info.plist necesita agregar CFBundleURLSchemes y LSApplicationQueriesSchemes.
-> Seleccione info.plist en su proyecto,
-> clic derecho,
-> Seleccione Abrir como código fuente
Vea la captura de pantalla a continuación
-> se abrirá el archivo xml
-> copiar - pegar debajo del código y reemplazarlo con su ID
CFBundleURLSchemes y LSApplicationQueriesSchemes para gmail, fb, twitter y enlazados.
Vea debajo de la pantalla su archivo final info.plist es
fuente
Es importante tener en cuenta que hubo un error con los teléfonos con jailbreak en 9.0.x que rompió los esquemas de URL. Si está ejecutando un dispositivo con jailbreak, asegúrese de actualizar Patcyh en Cydia
fuente
Bueno, puede abrir una aplicación llamando
openURL:
oopenURL:options:completionHandler:
(iOS 10 en adelante) directamente sin hacer la verificación condicionalcanOpenURL:
. Lea la sección de discusión en Apple doc para canOpenURL: método que dice:fuente
No parece que nadie haya abordado cómo especificar URL con parámetros incrustados. Cualquier URL que contenga parámetros no será posible especificar la URL específica en LSApplicationsQueriesSchemes. Por ejemplo, suponga que tengo una aplicación de correo electrónico que pasa la dirección de correo electrónico del remitente:
La única forma en que parece hacer que funcione en iOS9 es eliminar cualquier parámetro.
fuente
myemail
. Los parámetros no juegan ningún papel aquí.Apple cambió el método canOpenURL en iOS 9. Las aplicaciones que están buscando esquemas de URL en iOS 9 e iOS 10 tienen que declarar estos esquemas a medida que se envían a Apple.
fuente
Para PayPal, agregue los siguientes esquemas de URL:
Consulte este enlace
fuente
Swift 3.1, Swift 3.2, Swift 4
Agregue estos en Info.plist:
fuente
Cuando intenté llamar a Facebook desde mi propia aplicación hoy, descubrí que no hay una
LSApplicationQueriesSchemes
clave que pueda agregar aInfo.plist
(Xcode Versión 8.2.1 (8C1002)). Lo 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.fuente