Herramienta gratuita
Generador de AASA y assetlinks.json
Crea el archivo apple-app-site-association para los Universal Links de iOS y el assetlinks.json para los App Links de Android. Introduce los datos de tu app y copia o descarga un archivo listo para subir.
- Gratis, sin cuenta
- Funciona en tu navegador
- Formato components actual de Apple
¿Ya tienes los archivos? Revísalos con el validador
Apps
Añade cada app que deba abrir enlaces de este dominio. Cada una se convierte en una entrada de appIDs.
- App 1
10 caracteres, en tu cuenta de Apple Developer, en Membership details.
Del target de tu app en Xcode, por ejemplo com.example.app.
Rutas que abren la app
Las reglas se revisan de arriba abajo y gana la primera que coincide, así que pon las exclusiones encima de las reglas más amplias. * equivale a cualquier número de caracteres y ? a uno exacto.
- Regla 1
pares nombre=valor unidos con &
Otros servicios
Tu archivo
apple-app-site-association
Ejemplo. Rellena tus datos para sustituirlo.
{
"applinks": {
"details": [
{
"appIDs": [
"ABCDE12345.com.example.app"
],
"components": [
{
"/": "/*"
}
]
}
]
}
}Se genera en tu navegador. No se envía nada a ningún sitio.
Dónde alojarlo
- Súbelo a
https://tu-dominio/.well-known/apple-app-site-association, sin extensión.json. - Sírvelo por HTTPS con un certificado válido y un 200 directo, sin redirecciones.
- Envía la cabecera
Content-Type: application/json. - Repítelo en cada host de tus enlaces:
example.comywww.example.comnecesitan cada uno el archivo y su entradaapplinks:. - La CDN de Apple recoge el archivo nuevo en un plazo de 24 horas. Mientras tanto, prueba con
?mode=developer.
¿Prefieres no alojar archivos tú mismo? Los smart links son gratis, y en Enterprise Appy sirve los dos archivos en el dominio de enlaces de tu app.
Crea un enlace gratisCómo encaja todo
Dos archivos, una verificación mutua
Los Universal Links y los App Links solo abren tu app cuando las dos partes responden la una por la otra. La app nombra el dominio y un archivo en ese dominio nombra la app. Si falta una de las dos mitades, el enlace abre tu web.
App de iOS
Entitlement Associated Domains
applinks:example.comTu dominio
example.com/.well-known/
apple-app-site-association
Indica el app ID: Team ID más bundle ID
ABCDE12345.com.example.appassetlinks.json
Indica el nombre del paquete y la huella SHA-256
com.example.app · 14:6D:E9:…
App de Android
Intent filter con autoVerify
android:autoVerify="true"android:host="example.com"Las dos mitades coinciden: el enlace abre la app
Falta algo: el enlace abre tu web
Campo a campo
Qué significa cada clave de los archivos
Los dos archivos son JSON sin más. Estas son las claves que escribe el generador y las opcionales que conviene conocer.
apple-app-site-association
applinks- El servicio de Universal Links. Todo lo que decide qué URL abre qué app va aquí dentro.
details- Una lista de entradas que emparejan un grupo de apps con un grupo de reglas de URL. Usa varias si distintas apps gestionan rutas distintas.
appIDs- App IDs con el formato
<Team ID>.<bundle ID>, por ejemploABCDE12345.com.example.app. Cada app debe incluir también el dominio en su entitlement Associated Domains. components- Las reglas de URL, revisadas en orden. La primera que coincide decide si se abre la app.
/- Un patrón para la ruta de la URL, como
/products/*. Si lo omites, vale cualquier ruta. ?- Parámetros de consulta que deben coincidir, como diccionario.
{"ref": "?*"}exige un parámetrorefno vacío. #- Un patrón para el fragmento que va tras
#. exclude- Ponlo en
truepara que las URL que coinciden se queden en la web. Coloca estas reglas encima de las más amplias. comment- Una nota para quien lea el archivo. iOS la ignora.
webcredentials- Opcional. Indica qué apps pueden usar con el autorrelleno las contraseñas guardadas para esta web.
appclips- Opcional. Indica qué App Clips puede abrir este dominio.
* equivale a cualquier número de caracteres, ? a uno exacto y ?* a uno o más. La coincidencia distingue mayúsculas y minúsculas salvo que añadas "caseSensitive": false.
assetlinks.json
[ ]- El archivo es un array JSON de declaraciones, aunque solo tenga una.
relationdelegate_permission/common.handle_all_urlspermite que la app abra enlaces de este sitio.delegate_permission/common.get_login_credsañade credenciales compartidas.target- La app a la que se refiere la declaración.
namespace- Siempre
android_apppara una app de Android. package_name- El applicationId de la app, por ejemplo
com.example.app. sha256_cert_fingerprints- Huellas SHA-256 de los certificados que firman la app, en pares en mayúsculas separados por dos puntos. Incluye cada clave que firme las builds que instala la gente.
relation_extensions- Opcional, Android 15 y posteriores. Su
dynamic_app_link_componentsañade reglas de ruta al estilo de los components de Apple. Las versiones anteriores lo ignoran.
El formato antiguo con paths
Antes de iOS 13, cada entrada tenía un único appID, un array paths con NOT delante de las exclusiones, y el archivo necesitaba un array apps vacío. iOS 13 y posteriores leen appIDs y components. El generador solo escribe el formato moderno. Si aún das soporte a iOS 12, añade las claves antiguas a la misma entrada.
{
"applinks": {
"apps": [],
"details": [{
"appID": "ABCDE12345.com.example.app",
"paths": ["NOT /help/website/*", "/buy/*"]
}]
}
}{
"applinks": {
"details": [{
"appIDs": ["ABCDE12345.com.example.app"],
"components": [
{"/": "/help/website/*", "exclude": true},
{"/": "/buy/*"}
]
}]
}
}Errores frecuentes
Por qué falla un archivo que parece correcto
El JSON puede ser válido y los enlaces seguir abriendo la web. Revisa estos siete puntos antes que nada.
- 01iOS
Prefijo de Team ID equivocado
El archivo carga, pero iOS nunca abre la app.
Solución
Usa el Team ID de la cuenta que firma la versión publicada, el de Membership details. No el ID numérico de App Store, ni un Key ID, ni el equipo de una agencia si la app se publica desde tu cuenta.
Guía completa de Universal Links para iOS y Android - 02Android
Clave de subida en lugar de la clave de firma de apps de Play
Tus propias builds abren la app; las instalaciones desde Google Play abren el navegador.
Solución
Google firma las apps que distribuye con la clave de firma de apps. Copia su SHA-256 en Play Console, en Integridad de la app, y deja la clave de subida en la lista solo si compartes builds firmadas con ella.
App Links de Android sin verificar: diagnóstico en cinco minutos con adb - 03iOS + Android
El archivo está detrás de una redirección
La URL se abre bien en el navegador, pero la verificación falla.
Solución
Apple y Android esperan un 200 en la URL exacta. Excluye
¿Universal Links abren Safari? Corrige AASA, App Links, redirecciones y headers/.well-known/de las redirecciones del dominio sin www al www, a la inversa y por idioma. - 04iOS + Android
Content type erróneo, o HTML en lugar de JSON
El archivo está ahí, pero la plataforma lo ignora.
Solución
Sirve los dos archivos como
¿Universal Links abren Safari? Corrige AASA, App Links, redirecciones y headersapplication/json. Muchos servidores envían el AASA, que no tiene extensión, comoapplication/octet-stream, y algunos alojamientos responden con una página de acceso o un control antibots. - 05iOS + Android
Olvidar el host www
Los enlaces a example.com abren la app; los de www.example.com abren la web.
Solución
Cada host se comprueba por separado. Sube el archivo a los dos, inclúyelos en Associated Domains y declara ambos en los intent filters de Android.
Guía completa de Universal Links para iOS y Android - 06iOS
Una exclusión debajo de una regla general
Páginas que querías dejar en la web abren la app.
Solución
Gana la primera regla que coincide. Sube las reglas
excludepor encima de/*, como hace el ejemplo de Appy en el generador. - 07iOS
Extensión .json o carpeta equivocada
No hay nada en la dirección que pide iOS.
Solución
El archivo se llama
apple-app-site-association, sin extensión, y va en/.well-known/. El botón de descarga de arriba ya usa ese nombre.
Olvídate del alojamiento
Deja que Appy sirva los dos archivos
En Enterprise, tu app recibe su propio dominio de enlaces y Appy aloja en él apple-app-site-association y assetlinks.json, generados a partir del Team ID, el bundle ID, el paquete y las huellas que registres. Los smart links son gratis y los deep links llegan con Pro.
- Plan gratuito
- Sin tarjeta de crédito
- Clics ilimitados en todos los planes
- Tus enlaces siguen funcionando si cancelas
Preguntas frecuentes
¿Qué es un archivo apple-app-site-association?
Un archivo JSON en tu dominio que indica a iOS qué apps pueden abrir qué URL tuyas como Universal Links. Está en https://tu-dominio/.well-known/apple-app-site-association, no tiene extensión y enumera los app IDs (Team ID más bundle ID) con las reglas de URL de cada uno.
¿Qué es assetlinks.json?
Su equivalente en Android, basado en Digital Asset Links de Google. Está en https://tu-dominio/.well-known/assetlinks.json e indica el paquete y las huellas del certificado de firma de la app que puede abrir tus enlaces. Android lo comprueba al instalar la app y solo entonces trata tus enlaces como App Links verificados.
¿Dónde subo los archivos generados?
A la carpeta /.well-known/ en la raíz de cada host que uses en tus enlaces. Los dos deben cargarse por HTTPS con un 200 directo, sin redirecciones y con el content type application/json. En alojamientos estáticos suele hacer falta una regla de cabeceras para el AASA, porque no tiene extensión.
¿Dónde encuentro mi Team ID y mi bundle ID?
El Team ID está en tu cuenta de Apple Developer, en Membership details. El bundle ID aparece en la pestaña General del target de tu app en Xcode. Juntos forman el app ID, por ejemplo ABCDE12345.com.example.app.
¿Cómo obtengo la huella SHA-256 para assetlinks.json?
Si Google Play firma tu app, abre Play Console, entra en Integridad de la app y copia la SHA-256 del certificado de la clave de firma de apps. Para las claves que guardas tú, ejecuta keytool -list -v -keystore my-release-key.keystore o ./gradlew signingReport. El generador acepta el valor con o sin dos puntos.
¿El AASA debe usar paths o components?
Usa components. Apple lo introdujo con iOS 13 y admite parámetros de consulta, fragmentos, exclusiones y comentarios. El array paths antiguo solo hace falta si aún das soporte a iOS 12 o anteriores; en ese caso, pon los dos en la misma entrada.
¿Un archivo puede cubrir varias apps?
Sí. En el AASA, enumera cada app ID en appIDs o añade entradas details separadas si las apps gestionan rutas distintas. En assetlinks.json, añade una declaración por paquete al array. El generador admite varias apps de iOS; para un segundo paquete de Android, copia la declaración y cambia el nombre del paquete y las huellas.
¿Cuánto tardan los cambios en llegar a los dispositivos?
Según Apple, su CDN solicita tu archivo AASA en un plazo de 24 horas, y los dispositivos buscan cambios aproximadamente una vez por semana tras la instalación. Android verifica al instalar la app; en un dispositivo de pruebas, adb shell pm verify-app-links --re-verify com.example.app repite la comprobación.
¿Tengo que firmar el archivo AASA?
No. Firmarlo con tu certificado TLS solo era necesario en iOS 8. Desde iOS 9, Apple espera un archivo JSON sin firmar servido por HTTPS.
¿Se envía a Appy algo de lo que escribo?
No. Los archivos se generan con código que se ejecuta en tu navegador y nada de lo que escribes se sube ni se guarda. El validador funciona de otra forma: descarga los archivos de tu dominio cuando lo ejecutas.
Siguientes pasos
Comprueba el resultado y sigue leyendo
- Herramienta gratuitaValidador de Universal LinksCuando los archivos estén publicados, revísalos en tu dominio, en la CDN de Apple y con la API de Digital Asset Links de Google.
- GuíaGuía completa de Universal Links para iOS y AndroidGuía completa sobre universal links, deep links y app links, con implementación y buenas prácticas para marketing móvil.
- Guía¿Universal Links abren Safari? Corrige AASA, App Links, redirecciones y headersFlujo práctico para corregir universal links y app links que abren navegador en lugar de la app.
- GuíaApp Links de Android sin verificar: diagnóstico en cinco minutos con adbDesde Android 12, un App Link que falla la verificación de dominio se abre en el navegador en lugar de tu app — en silencio y no en todos los dispositivos. La lista adb que encuentra la causa rápido.
- GuíaDeep Linking vs Universal Links: comparación completaComprende las diferencias clave entre deep links y universal links, cuándo usar cada uno y cómo implementarlos correctamente.