Así que seguí este tutorial exactamente y utilicé los mismos valores que los proporcionados: https://blog.branch.io/how-to-setup-universal-links-to-deep-link-on-apple-ios-9
El archivo de Apple Association también está listo en el directorio de enlaces:
WEB_PAGE:PORT_NUMBER/apple-app-site-association
Todo parece estar dispuesto de este lado.
Agregué los derechos, actualicé el perfil de aprovisionamiento y todo está configurado.
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 el siguiente método:
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray * __nullable restorableObjects))restorationHandler
Pero nada.
¿Alguien ha perfeccionado esto? ¿Se me escapa algo?
ios
objective-c
xcode
ios9
ios-universal-links
Legolas
fuente
fuente
Respuestas:
Hay algunos problemas posibles.
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 - ver repositorio )
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á así
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 aquí , instrucciones rápidas (incompletas) sobre el uso de CloudFlare para TLS aquí .En mi prueba personal, hacer clic / escribir en un enlace en Safari nunca abrió la aplicación directamente. Ha funcionado hacer clic en otras aplicaciones (iMessage, Mail, Slack, etc.) . Otros han informado que al hacer clic en enlaces en los resultados de búsqueda de Google se ha abierto la aplicación directamente.
Tenga en cuenta que si un enlace universal 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 en la aplicación), iOS deja de abrir la aplicación cuando visita esa URL . Luego, en Safari, puede desplegar hacia abajo para revelar 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 específico de la ruta , según las rutas que especifique en el archivo apple-app-site-assocation. Entonces, si tiene rutas separadas,
yoursite.com/a/*
yyoursite.com/b/*
, si hace clic,yoursite.com/a/*
y abre su aplicación directamente, tiene la opción en la esquina superior derecha de la aplicación para hacer clicyoursite.com/a/*
. Si lo hace, las visitas posteriores ayoursite.com/a/*
se abrirá en el navegador, no en la aplicación. Sin embargo, noyoursite.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 por saber cómo funcionan los enlaces universales y qué casos extremos existen. Buena suerte.
fuente
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
applinks:
y luego su nombre de dominio. Ejapplinks:www.apple.com
.Aunque Xcode creó un archivo de derechos para mí, no se 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
apple-app-site-association
archivo: es solo texto sin formato y funciona, siempre que se sirva a través de HTTPS. (Sin embargo, deberá firmarlo si es compatible con iOS 8).fuente
Aparentemente hay un error en la documentación para hacer el archivo de asociación para Universal Links .
En donde dice:
debería decir
Para la mayoría de las aplicaciones, parece que el ID de 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 en "ID de aplicaciones" en la tabla debajo de "Identificadores". Busque su aplicación y use el valor de prefijo y el ID de paquete allí para crear su AppID para el archivo de asociación.
fuente
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ó.
fuente
La respuesta de St.derrick es informativa.
Pero para permitir que los enlaces universales nuevamente se abran en la aplicación en lugar de en un safari, debemos hacer lo siguiente.
fuente
app
, solo copiar, abrir, agregar a la lista de lectura, etc.Para validar
apple-app-site-association
en el lado del servidor, puede utilizar el validador oficial de Apple.https://search.developer.apple.com/appsearch-validation-tool/
fuente
Me di cuenta de que un 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 agregué una ruta (por ejemplohttp://example.com/mypath
) funcionó. Agregar"/"
a la lista de rutas lo solucionó:Como respondió slutsker en este hilo de los foros de desarrolladores de Apple.
fuente
Pasos rápidos para comprobar si ha implementado Universal Link correctamente.
Toque y mantenga presionado el enlace que espera para iniciar la aplicación. Debería ver un "Abrir en [nombre de su aplicación]" en el menú contextual.
Abra la aplicación Notes, escriba el enlace que espera para abrir la aplicación. Toque Listo. El enlace se volverá amarillo y al tocar el enlace debería abrir su 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 [nombre de la aplicación]" en safari, pero al tocar el enlace se abre el enlace en safari en lugar de iniciar la aplicación,
a. Intente tirar hacia abajo en 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, vuelva a Safari e intente iniciar la aplicación tocando el enlace nuevamente. Esta vez, la aplicación debería iniciarse porque al tocar el banner debería haber guardado la preferencia para abrir el enlace en la aplicación.
si. 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 de correo web 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 en su mayoría . Probablemente a Safari no le interese comprobar si la URL de destino es un enlace universal, cuando el enlace pertenece al mismo dominio en el que se encuentra el usuario. Intente iniciar la aplicación desde otro dominio.
fuente
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 agregue la versión.
fuente
apple-app-site-association
que tenía el prefijo de appId incorrectoLos enlaces universales no funcionarán si pega el enlace en el campo URL del navegador.
Los enlaces universales funcionan con un
<a href="...">
clic de elemento impulsado 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
<a href="...">
elemento impulsado 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 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
<a>
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.
fuente
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
fuente
En caso de que la gente de aquí esté buscando otras soluciones, reunimos todo un paso a paso sobre la depuración de enlaces universales, ya que hemos visto surgir muchos problemas que causan MUCHOS dolores de cabeza.
Echale un vistazo:
Guía de depuración de enlaces universales
Si solo está buscando configurar Universal Links desde cero, esta guía es realmente útil:
Guía de configuración de enlaces profundos de iOS
¡Espero que sean de ayuda!
fuente
Solo pensé en agregar algunas cosas que descubrí en caso de que más personas se encuentren con los mismos problemas que yo en el futuro. Estos están principalmente relacionados con errores de autenticación.
Aunque Apple no lo indica explícitamente, el
apple-app-site-association
archivo debe entregarse 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, ante un error de autenticación entre el dispositivo y el servidor, aparecerá un valor impreso como
"TrustResultValue" : 4
. UnaTrustResultValue
de 5 significa que el certificado es para el dominio incorrecto (por ejemplo, test.com servido desde www.test.com). UNATrustResultValue
de 4 significa que el certificado no es de confianza para este uso.Puede que haya algunos pasos útiles para depurar aquí . La sección "Probar el 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
apple-app-site-association
archivo. Los pasos se reducen a:Desinstale la aplicación. Esto es necesario porque el archivo se descarga durante la instalación.
Evite que el servidor sirva correctamente
apple-app-site-association
.En xcode, abra Ventana -> Dispositivos y luego seleccione su dispositivo.
Abra los registros del dispositivo haciendo clic en el triángulo en la parte inferior de la ventana.
Borre los registros haciendo clic en la papelera para borrar los registros anteriores que puedan estar relacionados.
Reinstale la aplicación con xcode haciendo clic en el botón de reproducción.
Una vez iniciada la aplicación, si el dispositivo solicita correctamente el archivo, los registros del dispositivo deberían contener un error que se puede encontrar buscando "apple-app-site-association".
Si el
apple-app-site-association
archivo se entrega correctamente (se omite el paso 2), no debería haber ningún error. En su lugar, se puede mostrar un error de autenticación si ese es el problema.fuente
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, tire hacia abajo para revelar el banner inteligente y toque ABRIR:
Esto posteriormente "recordará" abrir la aplicación.
fuente
Hemos agregado el archivo de asociación de sitio de aplicación de Apple a esta ubicación:
En iOS 9 funcionó bien, pero en iOS 10 no funcionó.
Parecía que el problema estaba con la ruta. Bien conocida :
Debido a https://example.com/.well-known/apple-app-site-association ruta redirigida a https://example.com
En mi opinión, si de alguna manera .la ruta conocida no funciona correctamente, rompe los enlaces universales.
fuente
Me las arreglé para que funcionara, pero tomó bastante tiempo y lucha. Tenga en cuenta que a menos que firme el
apple-app-site-association
archivo (¡la firma es opcional!), Tocar un enlace en Safari no abrirá su aplicación (me ha causado muchos dolores de cabeza).fuente
activitycontinuation
propiedad alapple-app-site-association
archivo json. developer.apple.com/library/ios/documentation/UserExperience/…Me tomó casi un día darme cuenta de esto. El problema que tuve fue no descargar los perfiles de aprovisionamiento actualizados en XCode (también reinicié XCode después de esto).
fuente
De la Guía de programación de búsqueda de aplicaciones: Soporte de enlaces universales
fuente
Después de dos días, resultó para mí que este tipo de enlaces (de la sucursal)
sólo funciona después de Archivar (también Ad-hoc) la aplicación e instalarla en el teléfono.
fuente
Si está alojando su
apple-app-site-association
en Firebase , ¡asegúrese de ponerlo en un/.well-known/
subdirectorio! Parece que Xcode consulta esa URL primero y, si tiene éxito, no intenta consultarlaapple-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/.well-known/apple-app-site-association
con un archivo de asociación vacío (pero correctamente formado) que anula el personalizado, dejándote sin idea de por qué nada funciona.fuente
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 los ID de aplicaciones que mostrará una lista de los nombres de sus aplicaciones y, entre paréntesis () detrás del nombre de la aplicación, revelará todos 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 colóquelo en el campo appID de detalles de asociación de sitio de aplicación de apple. Tuve exactamente este problema con una aplicación y sus enlaces universales.
fuente
El problema para mí resultó ser el
apple-app-site-association
archivo. Según la documentación de Apple, solo se requiere el parámetro applinks. Agregué elactivitycontinuation
parámetro y funcionó.fuente
activitycontinuation
es lo que nos arregló.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
APP_TARGET > Info > URL Types
) y configuro el esquema de URL desde aquí en la consola de Firebase para que coincida, pero todavía no funcionaba.Mi problema fue en realidad dos problemas:
Tenga cuidado si marca Gestionar firmas automáticamente
Si está comprobando la configuración "Gestionar automáticamente la firma" de Xcode como yo, ya que solo estaba tratando de hacer una aplicación de demostración rápida, querrá asegurarse de que el TeamID que se usa coincida con el de su consola Firebase. Originalmente fui a mi cuenta de desarrollador de Apple y copié el ID del equipo de mi página de Membresía, pero luego vi que el ID real que usaba Xcode era diferente. (Puedes encontrar esto en
APP_TARGET > General > Signing > Signing Certificate.
Para mí se veíaiPhone Developer: My Name (TEAM_ID)
).Prefije 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 de mi esquema de URL. Es típico usar su identificador de paquete aquí, pero Firebase en realidad lo antepone al ID de equipo que proporcionó en su consola de Firebase, por lo que también tuve que anteponerlo al identificador en la sección de tipos de URL en Xcode.
Después de estas dos correcciones y de volver a descargar el
GoogleService-Info.plist
archivo, no tuve problemas para abrir mis enlaces dinámicos.fuente
Después de dos días de total desesperación, creo que finalmente lo he arreglado. Aquí está mi solución:
Parece que las aplicaciones más antiguas usan un prefijo de aplicación diferente al de las aplicaciones más nuevas. Las aplicaciones más nuevas solo usan el ID de equipo para este propósito. Si el prefijo de la aplicación y el ID del equipo no son idénticos, parece que debe especificar el campo de continuación de la actividad en el archivo de asociación del sitio de la aplicación de Apple:
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.
fuente
Para mí, mi error fue que nuestro sitio está redireccionando www.domain.com a domain.com, por lo que todo www.domain.com/* fallará debido a eso. Espero que ayude.
fuente
Pude probar los enlaces universales en el simulador de iOS utilizando la aplicación Calendario.
Acabo de crear un evento y agregué la URL que quería probar en el
URL
campo del evento . Luego, al ver el evento creado, simplemente puede tocar el enlace URL y su aplicación debería abrirse.fuente
Después de pasar un día tratando de que esto funcione, reiniciar mi teléfono resolvió el problema.
Desinstalar / reinstalar la aplicación tampoco funcionó.
fuente
Para ios13, hay un nuevo formato: consulte aquí https://developer.apple.com/documentation/safariservices/supporting_associated_domains_in_your_app?language=objc
Actualicé mi archivo para que se vea así:
fuente
"exclude": true
alcomponents
objeto paracomment
ser verdadPara futuros lectores que encuentren esta página ...
Tuve una situación similar. Sin embargo, en mi situación, iOS10 estaba funcionando correctamente, y no importaba lo que hiciera (aumentar los números de compilación, eliminar / reinstalar, etc.), iOS9 parecía negarse a funcionar.
Llegué a esto desde iOS10 y necesitaba ser compatible con 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 (p
/apple-app-site-association
. ej. ) o en la carpeta .well-known (p/.well-known/apple-app-site-association
. ej .). Debido a que también soy compatible con Android, que también usa la carpeta .well conocida para un archivo similar, decidí poner ambos allí.Para nuevas instalaciones en iOS10, claramente solicita 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
.fuente
En mi caso, mi error fue poner parámetros de consulta en rutas:
cuando elimino '? target = confirm & *' de las rutas, comienza a funcionar
fuente