Claude Code
Escribe ambos archivos JSON, las cabeceras del hosting y las exclusiones del middleware, hace que cada ruta enlazada funcione en una carga en frío y crea un script de comprobación que ejecuta contra tu despliegue con curl y Node.
Claude Code + deep links
Un enlace a tu dominio en un correo, en un chat o en un login con magic link debería abrir la app en la pantalla correcta, no una pestaña del navegador. Para eso hacen falta dos pequeños archivos JSON en tu servidor, una capability en Xcode, un intent filter en Android y un par de interruptores de WebViewGold. Claude Code escribe, sirve y comprueba los archivos; tú añades los IDs y pruebas en teléfonos reales.
Desde $109 de pago único por plataforma, o deja que nuestro equipo lo haga todo desde $698.
Universal Links (iOS) hacen que los enlaces https normales a tu dominio abran la app. Necesitan un archivo apple-app-site-association (AASA) en tu servidor, la capability Associated Domains en Xcode y ShowExternalLink en true en Config.swift (documentación de Universal Links).
App Links (Android) hacen lo mismo en Android. Necesitan un archivo assetlinks.json que demuestre que el dominio pertenece a tu app, un intent filter para tu host en AndroidManifest.xml e IS_DEEP_LINKING_ENABLED en true en Config.java (documentación de App Links).
Los esquemas personalizados como myapp:// también existen, con una sintaxis distinta en cada plataforma: en iOS, myapp://url?link=https://app.example.com/page después de cambiar el esquema de URL en Info.plist; en Android, myapp://https://app.example.com/page con IS_CUSTOM_SCHEME_ENABLED y CUSTOM_DEEPLINK_SCHEME coincidiendo con el manifiesto. La documentación de iOS aconseja elegir Universal Links o el esquema personalizado, no ambos. Para los enlaces en los que la gente hace clic, https es la mejor opción: cuando la app no está instalada, el mismo enlace simplemente abre tu sitio web.
Ninguna directriz exige deep links, pero deciden si un revisor puede iniciar sesión. Un magic link o un restablecimiento de contraseña que abre Safari en lugar de la app deja la sesión en el sitio equivocado y al revisor atascado en tu pantalla de login. La guía de magic links explica ese caso en detalle.
Escribe ambos archivos JSON, las cabeceras del hosting y las exclusiones del middleware, hace que cada ruta enlazada funcione en una carga en frío y crea un script de comprobación que ejecuta contra tu despliegue con curl y Node.
Aportas el Team ID, el bundle ID, el nombre de paquete y las huellas de firma, añades Associated Domains en Xcode, editas el host en el manifiesto de Android, activas los interruptores de WebViewGold y compilas.
Descargan y verifican tus archivos según su propio calendario. Apple sirve el archivo a través de su CDN, así que los cambios no son instantáneos; reserva un poco de tiempo para eso.
| iOS Universal Links | Android App Links | |
|---|---|---|
| Archivo en el servidor | /.well-known/apple-app-site-association, sin extensión de archivo | /.well-known/assetlinks.json |
| Identidad de la app en el archivo | Team ID + bundle ID | Nombre de paquete + SHA-256 del certificado de firma |
| Proyecto nativo | Associated Domains: applinks:app.example.com (añade www por separado si lo usas) | Intent filter con tu host en AndroidManifest.xml, verificado automáticamente |
| Interruptor de WebViewGold | ShowExternalLink = true | IS_DEEP_LINKING_ENABLED = true |
| Prueba rápida | Toca el enlace en Notas o en Mensajes | adb shell pm get-app-links y un toque en Gmail o Mensajes |

¡Gran trabajo! Nunca tuve que usar código para nada, pero logré trabajar con esto y tener mi App lista. ¡Fácil y rápido! ¡También con gran ayuda de los creadores!
Rellena primero tus IDs. Merece la pena conservar el script de comprobación del punto 5: ejecútalo después de cada cambio en el hosting o en el middleware, o pide a Claude Code que lo registre como hook con /hooks.
Configura Universal Links (iOS) y App Links (Android) para nuestras apps WebViewGold en https://app.example.com. Primero lee las secciones Universal Links API y App Links and Deep Linking API en https://www.webviewgold.com/llms-full.txt. Valores: Apple Team ID ABCDE12345, bundle ID de iOS com.example.myapp, nombre de paquete de Android com.example.myapp, huellas SHA-256: [clave de firma de la app de la Play Console] y [clave de subida para compilaciones de prueba locales]. 1. Crea public/.well-known/apple-app-site-association (sin extensión de archivo) en el formato applinks con appIDs y components. Se abren en la app: /app/*, /auth/callback*, /invite/*, /reset-password*. Excluye /blog/* y /pricing (pon las exclusiones primero) para que las páginas de marketing se queden en el navegador. 2. Crea public/.well-known/assetlinks.json con la relación delegate_permission/common.handle_all_urls para nuestro nombre de paquete y ambas huellas. 3. Sirve ambos archivos con estado 200 y Content-Type application/json, sin redirecciones, middleware de autenticación, protección por contraseña ni desafíos antibots. Asegúrate de que la ruta catch-all de nuestra SPA y el middleware no intercepten /.well-known/. Configura las cabeceras para el hosting que use este proyecto (headers en next.config.js, vercel.json, _headers de Netlify o similar). 4. Cada ruta indicada en el punto 1 debe funcionar en una carga en frío solo con la URL: los deep links llegan a una URL, no a un estado del cliente. Las rutas protegidas redirigen al login y después de vuelta a la ruta original. 5. Crea scripts/check-deep-links.mjs: recibe una URL base, descarga ambos archivos y comprueba el estado, el content type, la ausencia de redirecciones, que el JSON sea válido y que los IDs coincidan con los valores de arriba. Añade npm run check:links y ejecútalo contra el despliegue de preview. 6. Escribe docs/deep-links.md: los pasos manuales en Xcode (capability Associated Domains con applinks:app.example.com, ShowExternalLink en true en Config.swift) y en Android Studio (host del intent filter y android:autoVerify en AndroidManifest.xml, IS_DEEP_LINKING_ENABLED en Config.java), más una lista de enlaces de ejemplo para cada patrón que pueda pegar en Notas o enviarme a mí mismo, y los comandos adb para probarlos. No edites los proyectos nativos. Informa de lo que cambiaste y de la salida del script de comprobación.
El formato actual con appIDs y components. Los components se evalúan en orden y gana la primera coincidencia, por eso las exclusiones van primero. El app ID es tu Team ID, un punto y el bundle ID.
{
"applinks": {
"details": [
{
"appIDs": ["ABCDE12345.com.example.myapp"],
"components": [
{ "/": "/blog/*", "exclude": true, "comment": "Las páginas de marketing se quedan en el navegador" },
{ "/": "/pricing", "exclude": true },
{ "/": "/app/*", "comment": "Todo lo que está dentro de la app web" },
{ "/": "/auth/callback*", "comment": "Magic links y retornos de OAuth" },
{ "/": "/invite/*" },
{ "/": "/reset-password*" }
]
}
]
}
}Con la firma de apps de Play (Play App Signing), Google firma las compilaciones que instalan los usuarios, así que la huella que importa es la de la clave de firma de la app que aparece en la Play Console en Integridad de la app. Añade también tu clave de subida si pruebas compilaciones firmadas en local.
[
{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.myapp",
"sha256_cert_fingerprints": [
"APP_SIGNING_KEY_SHA256_FROM_PLAY_CONSOLE",
"UPLOAD_KEY_SHA256_FOR_LOCAL_BUILDS"
]
}
}
]Los hostings estáticos suelen enviar un archivo sin extensión con un tipo de descarga, y Apple lo ignora. En Vercel sin Next.js, usa la sección headers de vercel.json; en Netlify, un archivo _headers.
// next.config.js (los archivos están en public/.well-known/)
module.exports = {
async headers() {
return [
{
source: "/.well-known/apple-app-site-association",
headers: [{ key: "Content-Type", value: "application/json" }],
},
{
source: "/.well-known/assetlinks.json",
headers: [{ key: "Content-Type", value: "application/json" }],
},
];
},
};
// Revisa también middleware.ts: excluye "/.well-known" de las redirecciones de autenticación y de idioma.Primero los IDs definitivos: el bundle ID, el nombre de paquete y el dominio quedan fijados en estos archivos.
Los deep links vinculan tu dominio a la identidad de tu app, así que decide ambos antes de empezar. Consulta primero el dominio propio y elegir el bundle ID una sola vez.
El Apple Team ID en los datos de la membresía de tu cuenta de desarrollador, el bundle ID en Xcode, el nombre de paquete y el SHA-256 de la clave de firma de la app en la Play Console.
Después ejecuta npm run check:links https://app.example.com contra producción. Ambos archivos deben pasar la comprobación antes de tocar los proyectos nativos.
En el portal de Apple Developer, activa Associated Domains para el App ID. En Xcode, selecciona el target de WebViewGold, abre Signing & Capabilities, añade Associated Domains con applinks:app.example.com (y la variante con www si enlazas a ella) y pon ShowExternalLink en true en Config.swift.
En AndroidManifest.xml, sustituye el host de ejemplo del intent filter de deep links por tu dominio y asegúrate de que lleve android:autoVerify="true". Pon IS_DEEP_LINKING_ENABLED en true en Config.java.
TestFlight y pruebas internas. Instala desde los canales de la tienda para que la compilación de Android lleve el certificado de firma de Play que indica tu assetlinks.json. El Cloud Builder puede generar ambas compilaciones si no tienes los IDE instalados.
curl -sI https://app.example.com/.well-known/apple-app-site-association devuelve 200, application/json y ninguna redirección. Apple descarga el archivo a través de su CDN; https://app-site-association.cdn-apple.com/a/v1/app.example.com muestra la versión que tiene Apple en este momento.digitalassetlinks.googleapis.com/v1/statements:list con tu sitio y la relación handle_all_urls) devuelve tu declaración.adb shell pm get-app-links com.example.myapp muestra tu dominio como verificado. Un toque en Gmail o Mensajes abre la app; adb shell am start -a android.intent.action.VIEW -d "https://app.example.com/app/orders/42" com.example.myapp llega a la página correcta.url apunta a /app/orders/42 abre esa misma página; consulta la guía de push.Universal Links y App Links para todo aquello en lo que una persona hace clic, porque recurren a tu sitio web cuando falta la app. Los esquemas personalizados son útiles para llamadas entre apps o para códigos QR que solo deben funcionar dentro de la app.
No para las rutas del archivo AASA ni de assetlinks.json, que viven en tu servidor. Sí necesitas una compilación nueva cuando añades un dominio, porque el dominio forma parte del entitlement Associated Domains y del manifiesto de Android.
Dentro de Safari, un toque en un enlace al mismo dominio se queda en el navegador. Prueba desde Notas, Mensajes o Mail, que es donde hacen clic los usuarios reales.
Puede verificar la parte del servidor con curl y con el script de comprobación, y escribe los comandos adb para Android. El toque en un dispositivo real es cosa tuya, y lleva dos minutos.
De forma indirecta. Hacen que los magic links, los restablecimientos de contraseña y los enlaces compartidos funcionen dentro de la app, lo que mantiene al revisor con la sesión iniciada y dentro de la app en lugar de perdido en un navegador.
El mismo resultado, con distinta cantidad de trabajo por tu parte. Las tres incluyen la garantía de aprobación y soporte humano 24/7.
$109 por plataforma, pago único
La licencia de WebViewGold: un proyecto de Xcode o Android Studio listo para usar. Pega tu URL, define nombre e icono, activa funciones, compila y envía. Actualizaciones gratuitas para siempre.
Ver planes en la página principal$349 por licencia, complemento de pago único
Sin Mac, sin Xcode, sin Android Studio: configura en el navegador, compilamos ambas apps en la nube y las entregamos a App Store Connect y a Play Console.
Cómo funciona el Cloud Builder Prueba la demo gratuita$698 por plataforma $798
Envíanos tu URL y tu icono. Nuestro equipo configura, compila y entrega tu app en 72 horas, en marca blanca y con los proyectos fuente. Ambas plataformas por $1,158.
Detalles del Full Service Con tecnología dePrecios de la Oferta de invierno válidos hasta el 31 de diciembre de 2026.
Garantía de aprobación en App Store & Google Play – o te devolvemos el dinero en 14 días
¿Prefieres delegarlo? Full Service: configuramos, compilamos y entregamos en 72 horas, desde $698 por plataforma. ¿Preguntas? Chatea con nosotros 24/7.
Los reembolsos se conceden bajo las condiciones indicadas en nuestras FAQ: un rechazo por motivos ajenos al contenido por parte de Apple y/o Google, reclamado dentro de los 14 días posteriores a la compra.