well links linking known domains deeplinking associated apple ios objective-c xcode ios9 ios-universal-links

linking - iOS9: Universal Links no funciona



universal links apple (30)

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 asociación de Apple también está listo en el directorio de enlaces: PÁGINA WEB: NÚMERO DE PUERTO / apple-app-site-association

Todo parece estar configurado de este lado.

He agregado los derechos, actualizado el perfil de aprovisionamiento y la configuración de todo.

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 restorationHandler:(void(^)(NSArray * __nullable restorableObjects))restorationHandler

Pero nada.

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



Aparentemente hay un error en la documentación para hacer 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 la identificación 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 busque "Certificados, identificadores y perfiles", haga clic en "Identificadores", luego "ID de aplicaciones" en la tabla debajo de "Identificadores". Encuentre su aplicación y use el valor de Prefijo y la ID del paquete allí para crear su AppID para el archivo de asociación.


Después de dos días de desesperación total, creo que finalmente lo arreglé. Aquí está mi solución:

Parece que las aplicaciones más antiguas usan un prefijo de aplicación diferente que las más nuevas. Las aplicaciones más nuevas solo usan la ID del equipo para este propósito. Si el prefijo de la aplicación y la ID del equipo no son idénticos, parece que debe especificar el campo de continuación de actividad en el archivo de asociación del sitio de la aplicación de Apple:

{ "activitycontinuation": { "apps": [ "YOUR_APP_PREFIX.de.company.app" ] }, "applinks": { "apps": [], "details": [ { "appID": "YOUR_APP_PREFIX.de.company.app", "paths": ["/*"] } ] } }

Otra cosa que experimenté durante mi viaje infernal fue que eliminar la aplicación y reiniciar el dispositivo parece ser la única forma de forzar la actualización de este archivo.


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

aplicaciones: xxxx.app.link

funciona solo después de Archivar (también Ad-hoc) la aplicación e instalarla en el teléfono.


El problema para mí resultó ser el archivo apple-app-site-association file. Según 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/*" ] }] } }




En mi caso, mi error fue poner parámetros de consulta en las rutas:

{ "applinks": { "apps": [], "details": [ { "appID": "TEAM_ID.BundleIdentifier", "paths": [ "/auth-ui/hub?target=confirm&*" ] } ] } }

cuando elimino ''? target = confirm & *'' de las rutas, comienza a funcionar


Hay algunos posibles problemas.

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

  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 aplicaciones. El mensaje de error se verá como el Sep 21 14:27:01 Derricks-iPhone swcd[2044] <Notice>: 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 here , instrucciones rápidas (incompletas) sobre el uso de CloudFlare para TLS here .

  3. En mis pruebas personales, hacer clic / escribir en un enlace en Safari nunca ha abierto la 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 Universal Link logra abrir su aplicación y luego hace clic en Safari (tocando su sitio en la esquina superior derecha de la barra de navegación de 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 UL parece una ruta específica , en función de las rutas que especifique en el archivo apple-app-site-assocation. 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 así abrir su aplicación directamente.

Avíseme si descubre 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 el derecho de Dominios asociados, cada entrada debe comenzar con aplicaciones applinks: y luego su nombre de dominio. Por ejemplo, aplicaciones applinks:www.apple.com .

  • Aunque Xcode creó un archivo de derechos para mí, no lo incluyó en mi compilación: tuve que hacer clic en ese cuadro manualmente.

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


Hemos agregado 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 la 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

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

En mi opinión, si la ruta bien conocida no funciona correctamente, rompe los enlaces universales.


La Answer de St.derrick es informativa.

Pero para permitir que los enlaces universales se abran nuevamente en la aplicación en lugar de un safari, debemos hacer lo siguiente.

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

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

Para solucionarlo, tira hacia abajo para mostrar el banner inteligente y toca ABRIR:

Posteriormente, "recordará" abrir la aplicación.


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

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

Como respondió slutsker en this hilo de los foros de desarrolladores de Apple.


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


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

(Preferencias> Cuentas> Ver detalles> Descargar todo)


Para ayudar a depurar este problema, busque "swcd" en la salida de la consola de su dispositivo al instalar su aplicación para ver si el registro de su enlace universal funcionó o no.

  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 registros del dispositivo). Mantenga esta ventana abierta.
  4. Instala tu aplicación y deja que se inicie.
  5. Filtre la salida de la consola a "swcd". Si tiene éxito, verá algo como la siguiente captura de pantalla. Si falla, verás algo más. Si no ve nada, desordenó algo fundamental, como agregar los derechos de Dominios asociados.


Para cualquiera que necesite probar fácilmente la apertura de enlaces (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


Para futuros lectores que encuentren esta página ...

Tuve una situación similar. Sin embargo, en mi situación, iOS10 estaba funcionando AOK, y no importa lo que hice (aumentar los números de compilación, eliminar / reinstalar, etc.), iOS9 parecía negarse a funcionar.

Estaba llegando a esto desde iOS10, y necesitaba admitir iOS9. En ese momento, la documentación aquí, here , establece claramente que el archivo puede ubicarse 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 ). Debido a que también estoy apoyando Android, que también usa la carpeta .well conocida para un archivo similar, decidí poner ambos allí.

Para nuevas instalaciones en iOS10, solicita claramente el archivo raíz, falla, luego solicita el archivo .well conocido y tiene éxito.

Para iOS9, solicitó claramente 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 .


Para mí, después de implementar todas las respuestas anteriores y probar que el archivo AASA realmente se estaba descargando con la respuesta de mpoisot, mi problema fue que en Xcode agregué el dominio asociado como:

applinks:example.com

y en mi aplicación de notas intentaba usar:

Https://example.com

porque mi AASA no está firmado y quería asegurarme de que estaba sirviéndolo a través de HTTPS. Así que funcionó cuando en mi aplicación de notas intenté usar:

example.com

Funciona para mí en un dispositivo físico, usando iOS 12.1.2 con una compilación de desarrollo de Xcode o una compilación de distribución de Testflight


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



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

  • Mantenga presionado el enlace que espera para iniciar la aplicación. Debería ver un "Abrir en [el nombre de su aplicación]" en el Menú contextual.

  • Abra la aplicación Notas, escriba el enlace que espera para abrir la aplicación. Toca Listo. El enlace se volverá amarillo y al tocar el enlace se abrirá la aplicación y no Safari.

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

  • En Safari, si el menú contextual muestra "Abrir en [el nombre de su aplicación]" en safari, pero al tocar el enlace se abre el enlace en safari en lugar de iniciar la aplicación,

    a. Intente desplegar la página de safari que se abrió cuando se hizo clic en el enlace, como la forma en que ''tira 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 al safari e intente iniciar la aplicación tocando el enlace nuevamente. Esta vez, la aplicación debería iniciarse porque tocar el banner debería haber guardado la preferencia de abrir el enlace en la aplicación.

    segundo. Si la aplicación aún no se inicia después del paso a., Intente enviar 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 estado intentando 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 en su mayoría falla . Probablemente a safari no le interese comprobar si la URL de destino es un enlace universal, cuando el enlace está en el mismo dominio en el que se encuentra el usuario. Intenta iniciar la aplicación desde otro dominio.


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.


Realmente no he visto exactamente 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 (configurado en APP_TARGET > Info > URL Types ) y configuré el esquema de URL desde aquí en la consola de Firebase para que coincida pero aún no funciona.

Mi problema fue en realidad dos problemas:

Tenga cuidado si marca Administrar firma automáticamente

Si está comprobando la configuración "Gestionar automáticamente la firma" de Xcode como lo estaba haciendo, ya que solo estaba tratando de hacer una aplicación de demostración rápida, querrá asegurarse de que el TeamID que se utiliza coincida con el de su consola 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 luego vi que la identificación real utilizada por Xcode era diferente. (Puede encontrar esto en APP_TARGET > General > Signing > Signing Certificate. Para mí, parecía iPhone Developer: My Name (TEAM_ID) ).

Prefije su ID de equipo 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 de 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 le dio en su consola Firebase, por lo que también tuve que prefijarlo al identificador en la sección de tipos de URL en Xcode.

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 dinámicos.


Si está alojando su apple-app-site-association en Firebase , asegúrese de ponerla en el subdirectorio /.well-known/ . Parece que Xcode consulta esa URL primero, y si tiene éxito, no intenta consultar la apple-app-site-association en el directorio raíz. Por alguna razón, los ingenieros de Firebase hicieron que los sitios web alojados respondieran automáticamente a /.well-known/apple-app-site-association con un archivo de asociación vacío (pero formado correctamente) que anula el tuyo personalizado, dejándote sin idea de por qué nada ¡trabajos!


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

A pesar de que Apple no lo declara explícitamente, el archivo de apple-app-site-association debe servirse a través de https, incluso si está firmado. Apple también debe confiar en el certificado utilizado para https. Entonces, si bien un certificado agregado al dispositivo en Configuración -> General -> Perfiles permitirá https en safari, no permitirá que funcionen los enlaces universales.

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 servido desde 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 here . La sección "Prueba de acceso a la asociación de sitios de aplicaciones de Apple" es una guía paso a paso sobre cómo asegurarse de que el dispositivo obtenga el archivo de apple-app-site-association . Los pasos se reducen a:

  1. Desinstala la aplicación. Esto es necesario porque el archivo se descarga en la instalación.

  2. Evite que el servidor sirva correctamente 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 solicita correctamente el archivo, 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.


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


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 ID de aplicaciones que mostrará una lista de los nombres de sus aplicaciones y entre corchetes () detrás del nombre de la aplicación, revela todas sus ID 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 póngalo en el campo de ID de aplicación de Apple-app-site-association details. Tuve exactamente este problema con una aplicación y sus enlaces universales.


  • Universal Links no funcionará si pega el enlace en el campo URL del navegador.

  • Los enlaces universales funcionan con un <a href="..."> clic de elemento dirigido por el usuario a través de dominios . Ejemplo: si hay un enlace universal en google.com que apunta a bnc.lt, se abrirá la aplicación.

  • Universal Links no funcionará con un elemento <a href="..."> controlado 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 mediante Javascript (en window.onload o mediante una llamada .click () en un elemento <a> ), 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 para resolver.