Appy
← Volver al blog
Guía

Deferred deep linking sin SDK: cómo funciona realmente por dentro

Puedes llevar el contexto de un enlace a través de una instalación sin incrustar un SDK de atribución. Esto es lo que sobrevive a la frontera de la tienda en Android e iOS, lo que se rompe y el coste en privacidad de cada alternativa.

14 de agosto de 2026•11 min de lectura

El contexto muere en la frontera de la tienda

Alguien toca un enlace a /product/42. La app no está instalada, así que tu redirección lo envía a la tienda. Instala, abre la app y aterriza en una pantalla de inicio genérica. La petición HTTP que llevaba su intención terminó en la ficha de la tienda: la app recién instalada arranca sin URL, sin cookie, sin referrer. Nada del clic sobrevivió.

Llevar ese contexto a través de la instalación es el deferred deep linking, y la respuesta estándar es "incrusta un SDK de MMP". Muchos equipos no quieren esa respuesta — el hilo 772811 de los Apple Developer Forums es uno de tantos preguntando cómo hacerlo sin SDK de terceros — y la audiencia creció en agosto de 2026, cuando AppsFlyer sacó el deferred deep linking de su plan gratuito. ¿Se puede construir? En Android, sí, de forma limpia y oficial. En iOS, más o menos, con soluciones que tienen costes reales.

Una nota de alcance: qué es el deferred deep linking y cuándo compensa lo cubrimos en otro artículo. Este post trata solo de la fontanería: qué transporte puede pasar un token a través de una instalación y cuánto puedes fiarte de cada uno.

Qué sobrevive a la instalación y qué no

Con install referrerEnlace de tienda simplecontexto perdidoToqueToqueTiendaTiendaInstalaciónInstalaciónPrimera aperturaPrimera apertura
Carril superior: un token viaja en el parámetro referrer de Play y sale al otro lado en la primera apertura. Carril inferior: un enlace de tienda simple, donde el contexto del clic desaparece al cargar la ficha.

Android: la Install Referrer API es la buena noticia honesta

Google Play lo resuelve de forma nativa. La URL de la tienda acepta un parámetro referrer, Play guarda esa cadena junto a la instalación y la app la lee literal tras el primer arranque mediante la Install Referrer API. Ese es todo el mecanismo: sin fingerprinting, sin portapapeles, sin adivinar.

No es exactamente "cero código": leer el valor requiere la librería com.android.installreferrer, un artefacto pequeño que habla localmente con la app de Play Store. No hace llamadas de red a nadie ni es un SDK de analítica; no añade nada a tus declaraciones de privacidad más allá de lo que hagas con la cadena.

Qué poner en el parámetro es cosa tuya: un ID de enlace, una campaña, un destino codificado. Mantenlo corto y URL-encoded — el referrer en play.google.com/store/apps/details?id=com.example&referrer=tok_8f2 vuelve exactamente como se envió.

El ciclo completo, de extremo a extremo

  1. 1Al tocar el enlace, tu redirección añade referrer=<token> a la URL de Play; el token apunta al contexto del clic guardado en tu servidor.
  2. 2En el primer arranque, la app conecta un InstallReferrerClient y lee la cadena installReferrer.
  3. 3La app intercambia el token en tu API por el contexto guardado — ruta del deep link, campaña — y enruta al usuario.
  4. 4Tu servidor marca el token como consumido. La cadena persiste en el dispositivo, así que el uso único debe vivir en el servidor.

Los límites son estrechos y predecibles: la API solo cubre instalaciones hechas a través de Google Play. Sideloads, Huawei AppGallery y otras tiendas no llevan referrer de Play, y el valor debe leerse una vez poco después del primer arranque.

Los enlaces de Appy ya resuelven la mitad de Android

Desde septiembre de 2026, cada enlace de Appy que lleva a alguien a una ficha de Google Play añade el parámetro referrer por su cuenta. No hay nada que configurar ni SDK que añadir. El referrer siempre lleva appy_slug, el slug del enlace que se tocó, así que la app sabe qué enlace trajo la instalación. Esta parte funciona en todos los planes, Free incluido.

Si el enlace tiene activado el reenvío de parámetros, la query string del toque también entra en el referrer. Un QR que apunta a appy.to/summer?screen=product-42&utm_source=poster llega a la primera apertura como la cadena de abajo. Para esto no guardamos nada de nuestro lado ni emparejamos nada a ojo.

Escaneado o tocado
https://appy.to/summer?screen=product-42&utm_source=poster
Enviado a Google Play
https://play.google.com/store/apps/details?id=com.example.app&referrer=appy_slug%3Dsummer%26screen%3Dproduct-42%26utm_source%3Dposter&screen=product-42&utm_source=poster
Lo que lee la app en el primer arranque
appy_slug=summer&screen=product-42&utm_source=poster

El ajuste en el panel

El reenvío de parámetros es un interruptor por enlace en el plan Business. Al crear un enlace aparece como “Activar el reenvío de parámetros”; en un enlace existente el mismo ajuste se llama “Reenviar parámetros entrantes”. Si está apagado, el referrer sigue llevando appy_slug y nada más.

Algunas reglas que conviene saber. Lo que hayas escrito tú en la URL de Play manda: si el destino ya contiene referrer=utm_source%3Dposter, Appy conserva ese valor y añade appy_slug al lado. appy_slug no se puede sobrescribir desde la query string, así que un enlace no puede quedarse con las instalaciones de otro. Y si los parámetros reenviados hicieran que el referrer superara 1 KB, Appy los descarta y deja solo el slug.

Los parámetros viajan en claro. Para un nombre de campaña o un ID de pantalla no pasa nada. Si se trata de algo personal o de más de unos pocos valores, reenvía un token corto y resuélvelo en tu servidor, siguiendo el patrón que verás más abajo.

Leerlo en la app

Añade la librería Install Referrer, lee el valor una vez en el primer arranque y analízalo como una query string. Este es todo el lado del cliente:

implementation("com.android.installreferrer:installreferrer:2.2")
fun readAppyReferrer(context: Context, onResult: (Map<String, String>) -> Unit) {
    val client = InstallReferrerClient.newBuilder(context).build()
    client.startConnection(object : InstallReferrerStateListener {
        override fun onInstallReferrerSetupFinished(responseCode: Int) {
            val raw = if (responseCode == InstallReferrerClient.InstallReferrerResponse.OK) {
                runCatching { client.installReferrer.installReferrer }.getOrNull()
            } else null
            client.endConnection()
            val uri = Uri.parse("?" + raw.orEmpty())
            onResult(uri.queryParameterNames.associateWith { uri.getQueryParameter(it).orEmpty() })
        }

        override fun onInstallReferrerServiceDisconnected() = Unit
    })
}

readAppyReferrer(this) { params ->
    val slug = params["appy_slug"] ?: return@readAppyReferrer
    params["screen"]?.let { openScreen(it) }
    analytics.logInstallSource(slug, params["utm_source"])
}

Ejecútalo solo en el primer arranque tras la instalación y guarda que ya lo hiciste. El referrer se queda en el dispositivo, así que leerlo en cada arranque en frío mandaría a la gente una y otra vez a la misma pantalla. Las instalaciones desde AppGallery o con un APK suelto llegan sin referrer; deja la pantalla de inicio normal como alternativa.

iOS: sin equivalente oficial, tres alternativas ordenadas

Apple no ofrece nada parecido al Install Referrer. Una ficha del App Store no transporta parámetros arbitrarios a través de la instalación; todo lo siguiente es un rodeo construido sobre esa ausencia. De menos malo a más nicho:

Paso por portapapeles

01 · fiabilidad media, con permiso

Tu página de clic escribe un token corto en el portapapeles — tras un toque de botón, porque Safari exige gesto de usuario para copiar — y reenvía al App Store. En la primera apertura, la app lee el portapapeles, encuentra el token y lo intercambia con tu servidor.

El problema llegó con iOS 16: leer el portapapeles dispara el aviso de pegado del sistema. El usuario ve "¿Permitir pegar desde Safari?" en la primera pantalla de una app instalada hace treinta segundos, y muchos lo rechazan. El rechazo es pérdida silenciosa: no puedes distinguirlo de "no había token". UIPasteboard.detectPatterns comprueba patrones sin preguntar, pero no lee el valor. Además, el portapapeles puede sobrescribirse entre el toque y la apertura. Funciona con frecuencia medible, pero tiene una segunda cara visible.

Matching probabilístico, hecho con honestidad

02 · una estimación con puntuación, nunca una certeza

Al hacer clic, el servidor guarda un registro breve: qué enlace, qué plataforma, la versión de OS del user agent, un timestamp y una forma de reconocer la red de la que vino el clic. En la primera apertura, la app pide un clic reciente que parezca del mismo teléfono en la misma red. No viaja ningún token. La coincidencia es una estimación, y la única pregunta real es si lo reconoce.

Hecho a la ligera, se merece su mala fama: direcciones IP en bruto guardadas durante días, el mejor candidato devuelto como si fuera seguro y un desconocido en la misma Wi-Fi de oficina capaz de quedarse con la recompensa de otro. Las señales, además, son más débiles de lo que parecen. iCloud Private Relay oculta direcciones, el CGNAT pone muchos teléfonos detrás de una, Chrome en Android dice que todos los teléfonos usan Android 10 y Safari en iOS 26 congela su versión en 18.6.

Hecho con cuidado, sigue siendo una estimación, pero útil. Puntúa cada candidato y devuelve la puntuación con las señales que la producen. Nunca dejes que una estimación llegue a la certeza. Deja que la app elija su umbral y no consumas un clic que quedó por debajo, para que el teléfono que de verdad hizo clic pueda reclamarlo. Mantén la ventana corta y no guardes ninguna IP. El SDK de Appy en Enterprise deja todo eso del lado de Appy. Tu app recibe el enlace o nada, tu backend puede consultar si una instalación está verificada y las redes se reconocen mediante un hash con clave de la dirección que rota cada día y caduca a las dos horas. Con la atribución estricta activada, solo cuentan las instalaciones verificadas y todo lo demás es orgánico.

App Clips y otras vías nicho

03 · fiable pero estrecho

Un App Clip invocado desde tu enlace recibe la URL completa y puede pasar el contexto a la app completa mediante un contenedor compartido tras la instalación. En su nicho es la vía más fiable de iOS, pero exige construir y mantener un App Clip y solo encaja en flujos donde una experiencia instantánea tiene sentido. Las shared web credentials resuelven la continuidad de sesión, no el contexto general del enlace. Vale la pena conocerlo; rara vez es la respuesta.

El patrón de diseño que vale para cualquier mecanismo

Sea cual sea el transporte del token — cadena referrer, portapapeles o un ID de coincidencia probabilística — la arquitectura de servidor es la misma, y acertarla importa más que el transporte. No metas el deep link entero en el canal: guarda el contexto en tu servidor y mueve solo una clave de vida corta.

01

Guarda el contexto bajo un token aleatorio

Al hacer clic, escribe {deep_link, campaña, timestamp} bajo un token corto y aleatorio, y pon solo el token en el transporte. Las cargas quedan pequeñas, los datos de campaña no acaban en portapapeles ni en logs, y puedes cambiar qué significa "contexto" sin tocar el cliente.

02

Expira agresivamente

Un TTL de 30 a 60 minutos cubre el viaje real de toque a instalación. Una ruta diferida resuelta una semana después del clic se equivoca más veces de las que acierta.

03

Impón el uso único

Consume el token en el primer intercambio. Las cadenas referrer persisten y el portapapeles puede leerse dos veces; sin uso único, una reinstalación o un segundo dispositivo puede reproducir el contexto de otra persona.

04

Falla hacia el defecto, no hacia una conjetura

Sin token, token expirado o permiso rechazado: lleva al usuario a la pantalla de inicio normal. Una primera apertura genérica decepciona un poco; acabar en el carrito de otro usuario es un ticket de soporte.

Fiabilidad, dicha con honestidad

Cifras aproximadas de equipos que ejecutan esto en producción. Tu mezcla de fuentes, retraso de instalación y versión de iOS de tu audiencia mueven cada número.

MecanismoPlataformaFiabilidadNotas
Play Install ReferrerAndroidAltaAPI oficial, sobrevive a instalaciones tardías, sin aviso al usuario. Solo instalaciones de Play.
Token en portapapelesiOSMediaCondicionada por el aviso de pegado de iOS 16+; los rechazos son silenciosos; el portapapeles es volátil.
Matching probabilístico puntuadoiOS; Android sin referrerMedia, puntuadaMisma red, versión de OS y tiempo. Fuerte en la misma Wi-Fi minutos después del toque; débil entre redes, con CGNAT y Private Relay. Solo vale la pena con una puntuación visible y un umbral.
Relevo por App ClipiOSAlta, estrechaDeterminista, pero solo para flujos que justifiquen construir un App Clip.

Qué significa esto para tu stack

Si tu necesidad es solo Android, necesitas muy poco: un enlace que añada el parámetro referrer, la pequeña librería y un endpoint de intercambio de tokens. Es una tarde de trabajo y es genuinamente libre de SDK en el sentido que importa: sin código de terceros observando a tus usuarios.

iOS es donde las soluciones gestionadas se ganan el sueldo, porque allí los rodeos son el producto: la infraestructura de matching, un modelo de puntuación que alguien tiene que mantener honesto y cada versión de OS que mueve el suelo, como iOS 26 congelando la versión de Safari. Por eso el SDK de Appy para iOS y Android, con deferred deep linking y atribución de instalaciones, está en el plan Enterprise, mientras que el referrer de Android viene con cada enlace.

Sé honesto sobre qué problema tienes. Si lo que necesitas es que "los usuarios que ya tienen la app aterricen en la pantalla correcta", eso es deep linking estándar, sin frontera de instalación. El shim de deep links de Appy cubre ese caso en el plan Pro por 9,99 $/mes, manda a la tienda a quien no tiene la app y no necesita SDK. Mide cuánta parte de tu embudo es realmente instalación nueva con contexto antes de comprar la maquinaria pesada.

Sigue leyendo

Preguntas frecuentes

¿Funciona el Install Referrer desde un escaneo de QR?

Sí, siempre que el QR se resuelva a través de un enlace que añada el parámetro referrer a la URL de Play. Al mecanismo no le importa cómo empezó el clic — escaneo, toque o NFC — solo que la URL de la tienda llevara el referrer al abrirse Play. Un QR que apunta a una URL de Play desnuda no lleva nada.

¿Por qué se rompió de repente mi enfoque de token en portapapeles?

Casi seguro, el aviso de pegado de iOS. Desde iOS 16, la primera lectura del portapapeles dispara un diálogo de permiso y una parte significativa de usuarios lo rechaza. Tu código no empeoró; tu lectura ahora tiene un humano en el circuito. Comprueba si tu tasa de tokens encontrados bajó en vez de irse a cero: esa es la firma.

¿Está permitido el matching probabilístico en iOS?

El acuerdo de desarrolladores de Apple prohíbe derivar datos de un dispositivo para identificarlo de forma única, y App Review puede rechazar apps cuyos SDK lo hacen. Un fingerprint que reconoce un teléfono entre apps y durante semanas está del lado equivocado de esa línea. Comparar un clic y una primera apertura en la misma red dentro de dos horas, para tu propio enlace, sin guardar la IP y con una puntuación, es algo mucho más acotado, pero aun así debes declarar esos datos en tu información de privacidad. Uses la herramienta que uses, pregunta qué guarda, durante cuánto tiempo y si te avisa cuando lo que te da es una estimación.

¿Necesito deferred deep linking siquiera?

Solo si la pantalla de aterrizaje tras la instalación cambia materialmente tu embudo. Si la mayoría de instalaciones viene de campañas genéricas sin destino concreto, un buen onboarding rinde más. Mide primero: cuenta los clics con destino real de deep link y app no instalada. Si el número es pequeño, invierte el esfuerzo en otra parte.

Seguir explorando

Producto
Oct 1, 2026
8 min de lectura

Descubre qué enlace trajo cada instalación: el SDK de Appy para iOS y Android

Appy ahora sigue tus enlaces más allá de la tienda de apps. El nuevo SDK te muestra instalaciones, eventos in-app e ingresos de cada enlace, código QR y campaña, y abre la pantalla correcta a los nuevos usuarios.

install attribution
deferred deep linking
install referrer
mobile attribution
Leer artículo
Guía
Oct 1, 2026
7 min de lectura

Chrome le dice a cada servidor que tu teléfono usa Android 10

Chrome en Android dice que todos los teléfonos son Android 10, modelo K. Qué supuso eso para el matching de deferred deep links, por qué Critical-CH contaría cada clic dos veces y cómo los Client Hints recuperan la versión y el modelo reales.

android
user agent
client hints
deferred deep linking
Leer artículo
Guía
May 14, 2026
9 min de lectura

Deferred deep linking: cómo funciona y cuándo usarlo

Conserva la intención original del enlace tras la instalación para que los nuevos usuarios aterricen en la pantalla correcta y no en la home por defecto.

deferred deep linking
install referrer
deep linking
mobile attribution
Leer artículo

¿Buscas otra cosa? Explora todos los temas en el blog.

Enruta las instalaciones que ya ganaste

El install referrer de Play en cada enlace y, en Pro, deep links que mandan a la tienda a quien no tiene la app, sin meter un SDK en tu app. Cuando necesites deferred deep links y atribución de instalaciones en iOS y Android, el SDK de Enterprise atribuye cada instalación al enlace que la trajo.

Empieza con Appy