wandres.dev
SEGURIDAD Y PRIVACIDAD · permisos y datos

App Tracking Transparency: qué es seguir, cuándo preguntar y qué se rompe si no

El marco de transparencia del seguimiento no regula la publicidad ni los identificadores: regula una operación concreta, la de enlazar datos de tu app con datos recogidos por otras empresas. Esta lección define esa operación con precisión quirúrgica, explica por qué el diálogo tiene reglas de presentación que casi todo el mundo incumple, detalla las consecuencias técnicas de la negativa —incluido el bloqueo de dominios— y sitúa la pieza en el rompecabezas mayor del consentimiento europeo y la medición sin identidad.

⏱ 18 min

Hay una confusión que sobrevive en casi todas las conversaciones sobre este tema y conviene disolverla antes de escribir una línea de código: el marco de transparencia del seguimiento no pregunta si puedes hacer publicidad, ni si puedes medir, ni siquiera si puedes recoger datos. Pregunta por una operación específica y bien definida, la de vincular información obtenida en tu app con información obtenida por otras empresas en sus propias apps, webs o canales fuera de línea, con fines publicitarios o de medición publicitaria. Todo lo que no sea esa operación queda fuera, por muchos datos que manejes; y todo lo que sea esa operación queda dentro, aunque no toques el identificador de publicidad. Quien entiende que la unidad regulada es el enlace entre dominios de datos, y no el dato ni el identificador, deja de hacer las preguntas equivocadas.

🎯 Al terminar esta lección sabrás
  • Delimitar con exactitud qué operaciones cuentan como seguimiento y cuáles quedan explícitamente fuera.
  • Solicitar la autorización cumpliendo las condiciones de estado y presentación que impone el sistema.
  • Anticipar las consecuencias técnicas de la negativa, desde el identificador nulo hasta el bloqueo de dominios.
  • Articular esta capa con el consentimiento europeo y con la medición agregada sin identidad.

Qué cuenta exactamente como seguimiento

La definición operativa tiene dos ramas y ambas hay que memorizarlas. La primera es el enlace entre dominios: tomar datos de una persona o de un dispositivo recogidos en tu app y combinarlos con datos de esa misma persona o dispositivo recogidos por otra empresa en sus propias propiedades, con la finalidad de publicidad segmentada o de medición de publicidad. La segunda rama es el intermediario: compartir datos con un corredor de datos, un actor cuyo negocio consiste en agregar y revender información sobre personas. Esa segunda rama sorprende porque no exige que tú hagas nada con el resultado: basta con entregarlo.

Igual de importante es el conjunto complementario, porque es donde se equivocan los equipos prudentes por exceso. No es seguimiento vincular datos de distintas apps o webs de tu propia empresa, siempre que sean tuyas y así se declare. No es seguimiento el enlace que ocurre y termina en el dispositivo, sin que salga de él información que permita reconstruirlo. No es seguimiento compartir datos con un corredor exclusivamente para prevención del fraude o para detección de fraude publicitario y seguridad. Y no es seguimiento la analítica de producto que se queda dentro de tu propio perímetro, que es exactamente el motivo por el que la mayoría de las apps que muestran el diálogo no tendrían por qué mostrarlo.

Sobre esa definición se apoya una prohibición que muchos equipos descubren tarde y que es más severa que el propio diálogo. La creación de huellas de dispositivo —derivar un identificador estable a partir de señales del hardware, la configuración o el entorno para reconocer al usuario entre apps— está prohibida siempre, con autorización y sin ella. El permiso concedido habilita el identificador de publicidad y el enlace declarado; no convierte en legítimo un método que las reglas de la plataforma vetan por sí mismo. De ahí que las APIs de motivo requerido de la lección anterior y este marco sean dos caras del mismo diseño: una cierra la puerta técnica, la otra regula la puerta legítima.

⚠️
El identificador no es el criterio

Es perfectamente posible incurrir en seguimiento sin leer jamás el identificador de publicidad: basta con enviar un correo electrónico con huella criptográfica a un socio que lo cruza con su propio inventario. Y es posible no incurrir en seguimiento manejando datos sensibles, si todo se queda dentro de tu perímetro. La pregunta correcta nunca es qué identificador uso, sino con quién se combina el dato y para qué.

Pedir bien, una sola vez

La API es minúscula y ahí empieza el problema: su simplicidad esconde tres condiciones de uso que provocan la mayoría de los fallos en producción. La primera es que la petición solo se procesa con la app en primer plano y activa. Llamarla durante el arranque, desde el inicializador de la app o antes de que la escena alcance el estado activo, no muestra ningún diálogo y devuelve el estado indeterminado sin error, con lo que el equipo concluye que el usuario dijo que no. La segunda es que la cadena NSUserTrackingUsageDescription debe existir en el Info.plist, con las mismas exigencias de concreción que cualquier otra. Y la tercera es que el diálogo se muestra una única vez por instalación: no hay segunda oportunidad salvo desinstalación, y si el usuario ha desactivado globalmente la posibilidad de que las apps pregunten, el estado será denegado sin que ningún diálogo llegue a aparecer.

import AppTrackingTransparency
import SwiftUI

struct RaizApp: View {
    @Environment(\.scenePhase) private var fase
    var body: some View {
        Contenido()
            .task(id: fase) {
                guard fase == .active else { return }
                // pequena espera: la escena activa no garantiza ventana presentable
                try? await Task.sleep(for: .milliseconds(500))
                _ = await ATTrackingManager.requestTrackingAuthorization()
            }
    }
}

Alrededor del diálogo hay reglas de presentación que la revisión aplica con rigor. Puedes anteponer una pantalla propia que explique el beneficio, y es recomendable por el mismo motivo que en cualquier otro permiso: absorbe el rechazo sin gastar el intento. Lo que no puedes hacer es incentivar la respuesta afirmativa con recompensas, monedas virtuales o funcionalidad extra; tampoco condicionar el uso de la app a la aceptación; tampoco imitar el aspecto del diálogo del sistema ni redactar tu pantalla de modo que el usuario crea que el botón de permitir es el que cierra un anuncio. Y hay un detalle de secuencia que decide la conversión más que cualquier texto: el diálogo debe llegar cuando el usuario ya ha experimentado valor, no en el primer segundo de la primera sesión, donde compite con la ráfaga de permisos y pierde siempre.

flowchart TD
a[Arranque] --> b[Escena activa y valor entregado]
b --> c[Pantalla propia de contexto]
c -->|rechaza| d[Estado indeterminado, reintento posible]
c -->|acepta seguir| e[Dialogo del sistema]
e -->|autorizado| f[Identificador disponible y enlace permitido]
e -->|denegado| g[Identificador a ceros y dominios bloqueados]
g --> h[Medicion agregada sin identidad]

Lo que se rompe con la negativa

Aquí conviene ser concreto porque la consecuencia más citada es la menos importante. Sí, el identificador de publicidad pasa a devolver un valor compuesto íntegramente de ceros, idéntico en todos los dispositivos y por tanto inútil como clave. Pero el efecto de mayor alcance técnico es otro: los dominios que hayas declarado en la clave de dominios de seguimiento de tu manifiesto quedan bloqueados a nivel de red mientras no exista autorización. Las conexiones a esos hosts fallan, no se degradan; y si tu SDK de atribución los usa para todo, incluida la telemetría que no es seguimiento, verás errores de red masivos que ningún cambio en tu código arregla. La lectura correcta de ese diseño es que Apple no confía en la declaración: la hace cumplir.

🚫

Identificador nulo

El identificador de publicidad devuelve ceros. Cualquier lógica que lo use como clave de deduplicación o de sesión debe tener una ruta alternativa que no dependa de él.

🌐

Dominios cortados

Los hosts declarados como de seguimiento dejan de resolver mientras no haya permiso. Separa el dominio de telemetría propia del dominio de atribución o perderás ambos.

📊

Atribución agregada

La medición se traslada a los mecanismos de atribución del sistema, con conversiones codificadas, retardos aleatorios y umbrales de privacidad. Cambia la unidad de análisis, no la desaparece.

La respuesta madura a este escenario no consiste en optimizar el diálogo hasta el último píxel sino en rediseñar la medición para que no dependa de la identidad. El sistema ofrece mecanismos de atribución donde la red publicitaria recibe una notificación firmada por el dispositivo con un valor de conversión reducido, sin identificador de usuario, tras una ventana temporal aleatorizada y sujeta a umbrales que suprimen los datos cuando el volumen es demasiado bajo para preservar el anonimato. Trabajar con eso exige una mentalidad estadística distinta: se abandonan los embudos por usuario y se razona con cohortes, campañas y elasticidades; se codifica en unos pocos bits la única señal que de verdad importa; se aceptan intervalos de confianza en lugar de cifras exactas. Muchos equipos descubren, al hacer el ejercicio, que las decisiones de inversión que tomaban no necesitaban la granularidad que creían necesitar.

Falta una advertencia que evita errores caros en Europa. Esta autorización no es consentimiento en el sentido del reglamento europeo de protección de datos, y el consentimiento europeo no sustituye a esta autorización: son dos capas independientes, con definiciones, bases jurídicas y titulares distintos. Una app que opera en la Unión Europea necesita ambas, en el orden correcto, y con coherencia entre ellas: no tiene sentido que la plataforma de gestión de consentimiento registre un sí para publicidad personalizada cuando el estado del sistema es denegado, porque el estado del sistema manda sobre lo que técnicamente puede ocurrir. Conviene además saber que la implementación de este marco ha sido objeto de expedientes de competencia en varios países europeos, con sanciones ya impuestas, de modo que sus detalles operativos pueden cambiar por vía regulatoria y no solo por decisión de la plataforma.

💡
La pregunta previa es si debes preguntar

Antes de integrar nada, escribe en una frase qué enlace concreto entre datos tuyos y datos de otra empresa justifica el diálogo. Si no eres capaz de escribirla, no tienes seguimiento y mostrar el diálogo es un error doble: reduce la confianza sin obtener nada y te obliga a declarar en el manifiesto algo que no haces.

No se reguló un identificador: se reguló la operación de unir dos mundos de datos

El malentendido de fondo es tratar todo esto como una guerra por un número de identificación, cuando lo que realmente ocurrió fue el desmontaje de una suposición arquitectónica que la industria había dado por eterna: la de que existe una clave global capaz de referirse a la misma persona a través de sistemas que no comparten dueño ni contrato. Esa clave es precisamente lo que hace posible el enlace entre dominios, y sobre ella se construyó una economía completa de perfiles, segmentos y atribuciones determinísticas. Al hacerla depender de una autorización explícita que la mayoría no concede, y al prohibir además cualquier sucedáneo derivado del entorno, el sistema no encareció el seguimiento: eliminó el espacio de nombres compartido en el que el seguimiento era expresable. La consecuencia técnica es que la identidad deja de ser un dato transportable entre empresas y pasa a ser una propiedad local a cada perímetro, lo que empuja el cómputo hacia donde ya están los datos —el dispositivo, o tu propio backend— y convierte la medición en un problema de inferencia poblacional en lugar de uno de registro individual. Quien lo vive como una pérdida se pasa los años buscando el hueco que reconstruya la clave, y encontrará prohibiciones cada vez más estrechas. Quien lo entiende como un cambio de espacio de nombres rediseña el sistema alrededor de la primera parte, los datos que el usuario te da a ti directamente y a nadie más, y descubre que ese activo era el único que nunca dependió del permiso de una plataforma.

📝
Lo esencial

Seguir es enlazar datos de tu app con datos de otras empresas para publicidad o su medición, o entregarlos a un corredor de datos; lo local, lo propio y lo antifraude quedan fuera, y la huella de dispositivo está prohibida en todo caso. La petición exige app activa, cadena de uso y solo se muestra una vez. Sin autorización el identificador es cero y los dominios de seguimiento declarados se bloquean a nivel de red. Esta capa no sustituye al consentimiento europeo, y la medición se rehace con atribución agregada y razonamiento por cohortes.

⚔️ Decidir con evidencia si debes preguntar
  1. Redacta en una sola frase el enlace concreto entre tus datos y los de otra empresa que justificaría el diálogo; si no puedes, retira la integración y la clave de uso, y comprueba qué desaparece del manifiesto.
  2. Inspecciona en qué punto del ciclo de vida se llama hoy a la petición y verifica en dispositivo real que la escena está activa; registra cuántas sesiones acaban en indeterminado por llamarla demasiado pronto.
  3. Separa el dominio de tu telemetría propia del dominio de atribución de terceros y comprueba, denegando el permiso, que la telemetría sigue llegando y la atribución no.
  4. Reconstruye una decisión de inversión reciente usando solo datos agregados de atribución y compárala con la que tomasteis con datos por usuario: cuantifica cuánta granularidad era realmente necesaria.
  5. Si operas en la Unión Europea, dibuja el orden exacto entre tu plataforma de consentimiento y este diálogo, y define qué ocurre en cada una de las cuatro combinaciones posibles de respuestas.