iOS9: Universal Links no funciona

Así que seguí el tutorial https://blog.branch.io/how-to-setup-universal-links-to-deep-link-on-apple-ios-9 y uso exactamente los mismos valores que el proporcionado.

El archivo de la Asociación de Apple también está listo en el directorio de enlaces: PÁGINA WEB: PORT_NUMBER / apple-app-site-association

Todo parece estar configurado en este lado.

Agregué los derechos, actualicé el perfil de provisión y todo lo que configuró.

Cuando ejecuto la aplicación en mi dispositivo y abro el enlace http: // WEB_PAGE: PORT_NUMBER , esto siempre abre Safari.

Incluso tengo puntos de interrupción en los siguientes métodos:

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restrationHandler:(void(^)(NSArray * __nullable restrableObjects))restrationHandler 

Pero nada.

Alguien ha perfeccionado esto? ¿Hay algo que me perdí?

Hay algunos posibles problemas.

  1. Intente pegar su dominio en este validador de enlace y asegúrese de que no haya problemas: https://limitless-sierra-4673.herokuapp.com/ (crédito a ShortStuffSushi – ver repository )

  2. iOS registra un mensaje de error en los registros del sistema si no tiene TLS configurado correctamente en el dominio especificado en sus derechos. Está enterrado en los registros del sistema operativo, no en los registros de la aplicación. El mensaje de error se verá como el Sep 21 14:27:01 Derricks-iPhone swcd[2044] : 2015-09-21 02:27:01.878907 PM [SWC] ### Rejecting URL 'https://examplecustomdomain.com/apple-app-site-association' for auth method 'NSURLAuthenticationMethodServerTrust': -6754/0xFFFFE59E kAuthenticationErr . Mensaje de error extraído de aquí , instrucciones rápidas (incompletas) sobre el uso de CloudFlare para TLS aquí .

  3. En mis pruebas personales, hacer clic / escribir en un enlace en Safari nunca ha abierto una aplicación directamente. Hacer clic desde otras aplicaciones (iMessage, Mail, Slack, etc.) ha funcionado. Otros han informado que al hacer clic en los enlaces en los resultados de búsqueda de Google se ha abierto la aplicación directamente.

  4. Tenga en cuenta que si un enlace universal tiene éxito al abrir su aplicación y luego hace clic en Safari (al tocar su sitio en la esquina superior derecha de la barra de navegación en la aplicación), iOS deja de abrir la aplicación cuando visita esa URL . Luego, en Safari, puede desplegar para mostrar un banner en la parte superior de la página con “Abrir”. Perdí mucho tiempo en esto. Tenga en cuenta que hacer clic en el sitio => deshabilitar la UL parece específico de la ruta , en función de las rutas que especifique en el archivo de la asociación Apple-sitio de la aplicación. Entonces, si tiene rutas separadas, yoursite.com/a/* y yoursite.com/b/* , si hace clic en yoursite.com/a/* y abre su aplicación directamente, entonces tiene la opción en la esquina superior derecha de la aplicación para hacer clic en yoursite.com/a/* . Si lo hace, las visitas posteriores a yoursite.com/a/* se abrirán en el navegador, no en la aplicación. Sin embargo, yoursite.com/b/* debería verse afectado y aún abrir su aplicación directamente.

Avísame si descubres cuál es el problema. Personalmente, tengo mucha curiosidad sobre cómo funcionan los enlaces universales y qué casos extremos existen. Buena suerte.

Hay muchas formas en que esto puede salir mal. Dos puntos me causaron problemas:

  • En Xcode, cuando agrega la titularidad de Dominios Asociados, cada entrada debe comenzar con applinks: y luego su nombre de dominio. Por ejemplo, applinks:www.apple.com .

  • Aunque Xcode creó un archivo de derechos para mí, no se incluyó en mi comstackción: tuve que hacer clic en esa casilla manualmente.

Y sí, después de hacerlo, no fue necesario firmar el archivo apple-app-site-association : es solo texto plano, y funciona, siempre y cuando se publique a través de HTTPS. (Sin embargo, aún deberá firmarlo si es compatible con iOS 8).

Aparentemente hay un error en la documentación para crear el archivo de asociación para Universal Links .

En donde dice:

El valor de la clave de ID de aplicación es la ID del equipo de la aplicación y la ID del paquete

debería decir

El valor de la clave de ID de aplicación es el Prefijo de la aplicación y la ID del paquete

Para la mayoría de las aplicaciones, parece que el ID del equipo y los prefijos de la aplicación son los mismos, pero si su aplicación ha estado en la tienda durante muchos años, estos valores pueden ser diferentes.

Para encontrar este valor, abra el Centro de miembros en https://developer.apple.com y consulte “Certificados, identificadores y perfiles”, haga clic en “Identificadores” y luego “ID de aplicación” en la tabla debajo de “Identificadores”. Encuentre su aplicación y use el valor Prefijo y la ID del paquete allí para crear su AppID para el archivo de asociación.

Para validar apple-app-site-association en el servidor, puede usar el validador oficial de Apple.

https://search.developer.apple.com/appsearch-validation-tool/

La respuesta de St.derrick es informativa.

Pero para habilitar nuevamente los enlaces universales para abrir en la aplicación en lugar de safari, debemos hacer lo siguiente.

  • Mantenga presionado el enlace Universal en Mail o iMessage, luego verá las opciones para abrir en safari o en la aplicación.

Me di cuenta de que el problema era que los enlaces al directorio raíz a (por ejemplo, http://example.com/ ) no abrían mi aplicación, pero si añadía una ruta (por ej., http://example.com/mypath ) funcionó. Agregar "/" a la lista de caminos lo sovled:

 { "applinks": { "apps": [], "details": [ { "appID": "TEAM_ID.BundleIdentifier", "paths": [ "*", "/" ] } ] } } 

Como respondió slutsker en este hilo de foros de desarrolladores de Apple.

Pasos rápidos para verificar si ha implementado Universal Link correctamente.

  • Mantén presionado el enlace que esperas para iniciar la aplicación. Debería ver un “Abrir en [nombre de su aplicación]” en el menú contextual.

  • Abra la aplicación Notas, escriba el enlace que espera abrir la aplicación. Toca Hecho. El enlace se pondrá amarillo y al tocar en el enlace debería abrir su aplicación, y no Safari.

  • Si el enlace http://yourDomain.com no está ejecutando la aplicación, intente http://yourDomain.com/yourFolder/

  • En Safari, si el menú contextual muestra “Abrir en [nombre de tu aplicación]” en safari, al tocar el enlace se abre el enlace en Safari en lugar de abrir la aplicación,

    a. Intenta desplegar la página del safari que se abrió cuando se hizo clic en el enlace, de la misma manera que “tirar para actualizar”. Debería aparecer un banner que pueda abrir su aplicación. Toque el banner para abrir la aplicación, cierre la aplicación presionando el botón de inicio, regrese a safari e intente iniciar la aplicación tocando nuevamente el enlace. Esta vez, la aplicación debería iniciarse porque al tocar el banner debería haberse guardado la preferencia de abrir el enlace en la aplicación.

    segundo. Si la aplicación todavía no se inicia después del paso a., Intente enviar por correo el enlace a un correo web como gmail y abra el sitio webmail en safari e intente hacer clic en el enlace. Si esto funciona, es posible que haya intentado iniciar la aplicación desde el mismo dominio que el enlace. Por lo que he visto, el lanzamiento de la aplicación desde el mismo dominio falla principalmente . Probablemente Safari no se preocupe de comprobar si la URL de destino es un enlace universal, cuando el enlace está en el mismo dominio en el que está el usuario. Intente iniciar la aplicación desde otro dominio.

Para ayudar a depurar este problema, busque “swcd” en la salida de la consola de su dispositivo cuando instale su aplicación para ver si el registro de su enlace universal funcionó o falló.

  1. Use un dispositivo real, no el simulador.
  2. Elimina la aplicación de tu dispositivo.
  3. Conecte el dispositivo a su computadora y vea la salida de la consola del dispositivo en xcode. (ventana -> dispositivos -> [su dispositivo] -> ver los registros del dispositivo). Mantenga esta ventana abierta.
  4. Instala tu aplicación y deja que se lance.
  5. Filtra la salida de la consola a “swcd”. Si es exitoso, verá algo como la siguiente captura de pantalla. Si falla, verá algo más. Si no ves nada, te equivocaste en algo fundamental como agregar el derecho de Dominios Asociados.

Applink agregado con éxito

También es muy importante boost la versión del proyecto o el número de comstackción después de integrar enlaces universales. Incluso si elimina / reinstala, iOS no recogerá los enlaces a menos que encuentre la versión.

  • Los enlaces universales no funcionarán si pega el enlace en el campo URL del navegador.

  • Los enlaces universales funcionan con un clic del elemento accionado por el usuario en todos los dominios . Ejemplo: si hay un enlace universal en google.com que apunta a bnc.lt, se abrirá la aplicación.

  • Los enlaces universales no funcionarán con un elemento dirigido por el usuario que haga clic en el mismo dominio . Ejemplo: si hay un enlace universal en google.com que apunta a un enlace universal diferente en google.com, no se abrirá la aplicación.

  • Los enlaces universales no se pueden activar a través de Javascript (en window.onload o mediante una llamada .click () en un elemento ), a menos que sea parte de una acción del usuario.

fuente: https://dev.branch.io/getting-started/universal-app-links/support/ios/#appsbrowsers-that-support-universal-links

La tercera bala me costó alrededor de un día averiguarlo.

En caso de que la gente aquí esté buscando otras soluciones, preparamos paso a paso la depuración de Universal Links, ya que hemos visto surgir muchos problemas que causan MUCHOS dolores de cabeza.

Echale un vistazo:

Guía de depuración Universal Links

Vista previa de la guía de depuración

Si solo desea configurar Universal Links fresh, esta guía es realmente útil:

Guía de configuración de enlaces profundos de iOS

Espero que sean útiles!

Solo pensé en agregar algunas cosas que descubrí en caso de que más personas encuentren los mismos problemas que yo en el futuro. Estos están principalmente relacionados con errores de autenticación.

Aunque Apple no lo establece explícitamente, el archivo apple-app-site-association debe mostrar en https, incluso si está firmado. El certificado utilizado para https también debe ser confiable para Apple. Por lo tanto, aunque un certificado agregado al dispositivo en Configuración -> General -> Perfiles permitirá https en Safari, no permitirá que los enlaces universales funcionen.

En los registros del dispositivo, en un error de autenticación entre el dispositivo y el servidor, habrá un valor impreso como "TrustResultValue" : 4 . Un TrustResultValue de 5 significa que el certificado es para el dominio incorrecto (por ejemplo, test.com se sirvió de http://www.test.com). Un TrustResultValue de 4 significa que el certificado no es confiable para este uso.

Puede haber algunos pasos útiles para la depuración aquí . La sección “Prueba de acceso a apple-app-site-association” es una guía paso a paso sobre cómo asegurarse de que el dispositivo obtenga el archivo apple-app-site-association . Los pasos se reducen a:

  1. Desinstalar la aplicación. Esto es necesario porque el archivo se descarga durante la instalación.

  2. Evite que el servidor sirva adecuadamente apple-app-site-association .

  3. En xcode, abra Ventana -> Dispositivos y luego seleccione su dispositivo.

  4. Abra los registros del dispositivo haciendo clic en el triángulo en la parte inferior de la ventana.

  5. Borre los registros haciendo clic en la papelera para borrar los registros anteriores que puedan estar relacionados.

  6. Vuelva a instalar la aplicación con xcode haciendo clic en el botón reproducir.

  7. Una vez que se ha iniciado la aplicación, si el dispositivo está solicitando el archivo correctamente, los registros del dispositivo deben contener un error que se puede encontrar buscando “apple-app-site-association”.

Si el archivo apple-app-site-association se sirve correctamente (el paso 2 se omite), entonces no debería haber ningún error. En su lugar, se puede mostrar un error de autenticación si ese es el problema.

La causa más común es cuando el usuario toca en la parte superior derecha, por lo que le dice a iOS que NO abra la aplicación (en este caso, Uber) en el futuro.

Para solucionarlo, despliegue para mostrar el banner inteligente y toque ABRIR:

Tire hacia abajo en Safari y ABRE otra vez

Esto posteriormente “recordará” abrir la aplicación.

Para cualquiera que necesite probar fácilmente enlaces de apertura (universales), también puede abrir el enlace en su simulador desde la terminal con este comando:

xcrun simctl openurl booted yourapp_or_http://yourlink

por ejemplo:

xcrun simctl openurl booted https://www.google.com

Me llevó cerca de un día para resolver esto. El problema que tenía no era descargar los perfiles de aprovisionamiento actualizados en XCode (también reinicié XCode después de esto).

(Preferencias> Cuentas> Ver detalles> Descargar todo)

Puedes probar enlaces universales en el simulador

De la Guía de progtwigción de búsqueda de aplicaciones: Soporte de enlaces universales

Me las he arreglado para hacer que funcione, pero tomó bastante tiempo y esfuerzo. Tenga en cuenta que a menos que firme el archivo apple-app-site-association (¡la firma es opcional!) Al tocar en un enlace en Safari no se abrirá su aplicación (me ha causado muchos dolores de cabeza).

Vaya a developer.apple.com y edite uno de sus perfiles de distribución. En la página de edición puede abrir una ventana emergente para las ID de las aplicaciones que mostrará una lista de los nombres de sus aplicaciones y en () corchetes redondos detrás del nombre de la aplicación que revela todas sus identificaciones de aplicaciones reales . Algunas aplicaciones pueden tener su ID de equipo como prefijo, pero otras no . Asegúrese de usar exactamente lo que ve en ese menú emergente dentro de () y colóquelo en el campo appID detalles de la aplicación apple-app-site-association. Tenía exactamente este problema con una aplicación y sus enlaces universales.

Agregamos el archivo apple-app-site-association a esta ubicación:

 https://example.com/apple-app-site-association 

En iOS 9 funcionó bien, pero en iOS 10 no funcionó.

Parecía que el problema era con una ruta bien conocida :

 https://example.com/.well-known/apple-app-site-association 

Debido a https://example.com/.well-known/apple-app-site-association ruta redirigida a https://example.com

 : Allowing redirect 'https://example.com/.well-known/apple-app-site-association' -> 'https://example.com/' : ### Rejecting AASA file size 154466 for URL https://example.com/.well-known/apple-app-site-association 

En mi opinión, si de alguna manera, una ruta bien conocida no funciona correctamente, rompe los enlaces universales.

Realmente no he visto el mismo combo de problema / solución que lo hizo funcionar para mí, así que podría agregar el mío en caso de que alguien tenga el mismo problema.

Para mi aplicación, estoy usando un esquema de URL personalizado (establecido en APP_TARGET > Info > URL Types ) y establecí el esquema de URL desde aquí en la consola de Firebase para que coincida, pero aún no funcionaba.

Mi problema era en realidad dos problemas:

Tenga cuidado si comprueba Gestionar la firma automáticamente

Si está revisando la configuración “Administrar la sesión automáticamente” de Xcode como yo, dado que solo estaba tratando de crear una aplicación de demostración rápida, querrá asegurarse de que el ID de equipo que se utiliza coincide con el de su consola de Firebase. Originalmente fui a mi cuenta de desarrollador de Apple y copié la identificación del equipo de mi página de membresía, pero más tarde vi que la identificación real que Xcode usaba era diferente. (Puede encontrar esto en APP_TARGET > General > Signing > Signing Certificate. Para mí se parecía al iPhone Developer: My Name (TEAM_ID) ).

Prefija su TeamID a su identificador de paquete en sus tipos de URL

Después de asegurarme de que coincidieran en mi consola Firebase y Xcode, mi siguiente problema fue el identificador para mi esquema de URL. Es típico usar su identificador de paquete aquí, pero Firebase en realidad prefija esto con la ID de equipo que proporcionó en su consola de Firebase, así que tuve que prefijarlo al identificador en la sección de tipos de URL en Xcode también.

Después de estas dos correcciones y de volver a descargar el archivo GoogleService-Info.plist , no tuve ningún problema para abrir mis enlaces dynamics.

El problema para mí resultó ser el archivo apple-app-site-association . De acuerdo con la documentación de Apple, solo se requiere el parámetro applinks. Agregué el parámetro activitycontinuation y funcionó.

 { "activitycontinuation": { "apps": [ "9JA89QQLNQ.com.apple.wwdc" ] }, "applinks": { "apps": [], "details": [{ "appID": "9JA89QQLNQ.com.apple.wwdc", "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*" ] }] } } 

Para mí, mi error fue que nuestro sitio está redirigiendo http://www.domain.com a domain.com, por lo que todo el sitio http://www.domain.com/* fallará debido a eso. Espero que ayude.

Después de dos días resultó para mí, que este tipo de enlaces (de la sucursal)

Aplicadores: xxxx.app.link

trabaje solo después de Archivar (también Ad-hoc) la aplicación e instálela en el teléfono.

Pude probar Universal Links en el simulador de iOS usando la aplicación Calendario.

Acabo de crear un evento y agregué la URL que quería probar en el campo URL del evento. Luego, al ver el evento creado, simplemente puede tocar el enlace URL y su aplicación debería abrirse.

Para futuros lectores que encuentren esta página https://stackoverflow.com/questions/32751225/ios9-universal-links-does-not-work/

Tuve una situación similar. Sin embargo, en mi situación, iOS10 estaba trabajando AOK, y no importaba lo que hiciera (números de comstackción, eliminar / reinstalar, etc.), iOS9 parecía negarse a trabajar.

Estaba llegando a esto desde iOS10, y necesitaba soportar iOS9. En ese momento, la documentación aquí – https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html – establece claramente que el archivo puede colocarse en la raíz del servidor web (por ejemplo /apple-app-site-association ) o en la carpeta .well-known (por ejemplo, /.well-known/apple-app-site-association ). Como también apoyo a Android, que también usa la carpeta .well-known para un archivo similar, decidí poner ambas cosas allí.

Para instalaciones nuevas en iOS10, solicita claramente el archivo raíz, falla, luego solicita el archivo .well-known y lo logra.

Para iOS9, claramente solicitó el archivo raíz, falla y no hace nada más.

Solución: si es compatible con iOS9, coloque el archivo en /apple-app-site-association .

Intereting Posts