[iOS] 4. Trabajar con ATT (Transparencia de seguimiento de aplicaciones / iOS)
Trabajar con ATT (Transparencia de seguimiento de aplicaciones) en iOS
ATT y gestión del consentimiento son sistemas separados que Tú debe coordinarse manualmente.
Esta guía explica cómo integrar correctamente Apple Transparencia de seguimiento de aplicaciones (ATT) Marco con nuestro SDK de CMP. ATT es un requisito a nivel de plataforma (Apple), mientras que CMP gestiona el consentimiento legal/regulatorio. Ambos deben colaborar para garantizar el cumplimiento y el correcto funcionamiento del SDK.
-
El diálogo ATT y la dirección de la capa de consentimiento (CMP) diferentes bases jurídicas y alcances.
-
ATT es el mecanismo de Apple para obtener el permiso del usuario para seguimiento entre aplicaciones (es decir, compartir identificadores como IDFA con terceros con fines publicitarios).
-
El capa de consentimiento (CMP) gobierna Uso de cookies y SDK para fines tales como análisis, personalización, medición o funciones esenciales de la aplicación — según lo exige el RGPD/ePrivacy y leyes similaresComo ejemplos, podemos mencionar Firebase (GFA), Crashlytics, OneSignal, MixPanel, Sentry, etc. Ninguno de ellos está relacionado directamente con ATT, pero Necesitas recopilar el consentimiento del usuario de todos modos.
-
Incluso si un usuario selecciona "Solicitar a la aplicación que no rastree" en el nivel del sistema en iOS, su aplicación Todavía puede procesar ciertos tipos de datos (por ejemplo, cookies funcionales, SDK de medición u otras herramientas técnicas) que Requerir una base legal o consentimiento según las leyes de privacidadPor lo tanto, la capa de consentimiento debe seguir mostrándose para que el usuario pueda elegir con respecto a estas tecnologías. Asegúrese de que este no sea su caso, ya que Si decide evitar que se muestre la capa de consentimiento, pero aún carga cualquier SDK que maneje datos a servidores desde el dispositivo, incluso con diferentes propósitos/proveedores, su aplicación se bloqueará..
Paso 1: requisitos previos
-
Versión mínima de iOS: iOS 14 (ATT no disponible en versiones anteriores)
-
Agregar el formulario Marco de transparencia de seguimiento de aplicaciones A tu proyecto
-
En su Info.plist, agregue:
<key>NSUserTrackingUsageDescription</key>
<string>This identifier will be used to deliver personalized ads and improve user experience.</string>
-
La cadena debe explicar claramente por qué solicita el seguimiento.
Apple podría rechazar una redacción vaga.
Toda la gestión de ATT debe administrarse en la propia aplicación móvil, y no a través de nuestro SDK, ya que nuestro SDK no conoce el ciclo de vida de la aplicación móvil que lo integra. La solicitud ATT debe mostrarse y gestionarse por completo antes nuestro SDKy el cuadro de diálogo ATT no debe cargarse al mismo tiempo ni encima de nuestra capa de consentimiento. Asegúrese de cargar nuestra capa de consentimiento únicamente a través de checkAndOpen() or forceOpen() métodos después manejar la solicitud ATT y asegurarse de que la elección del usuario con respecto a ATT ya se haya actualizado en el dispositivo. No cargar nuestra capa de consentimiento antes ese.
Paso 2: Verificar el estado de ATT
Verifique el estado actual de la autorización de ATT antes de inicializar los SDK de seguimiento:
import AppTrackingTransparency
import AdSupport
if #available(iOS 14, *) {
let status = ATTrackingManager.trackingAuthorizationStatus
switch status {
case .authorized:
// IDFA available
case .denied, .restricted:
// IDFA blocked
case .notDetermined:
// Prompt will be shown later
@unknown default:
break
}
}
Paso 3: Solicitar autorización de ATT
Si el estado es .notDetermined, solicitar autorización cuando la aplicación esté activa:
if #available(iOS 14, *) {
ATTrackingManager.requestTrackingAuthorization { status in
DispatchQueue.main.async {
self.didReceiveATTStatus(status)
}
}
} else {
// iOS < 14: proceed to CMP directly
openCMP()
}
Paso 4: Gestionar el resultado de ATT
Define cómo procesar el resultado de ATT y luego iniciar CMP:
func didReceiveATTStatus(_ status: ATTrackingManager.AuthorizationStatus) {
switch status {
case .authorized:
openCMP()
case .denied, .restricted:
rejectAdPurposesAndVendors {
self.openCMP()
}
case .notDetermined:
openCMP()
@unknown default:
openCMP()
}
}
Paso 5: Iniciar CMP
Una vez resuelto el problema de ATT, abra la interfaz de usuario de CMP para recopilar el consentimiento legal/regulatorio:
private func openCMP() {
CMPManager.shared.checkAndOpen()
}
Paso 6: Tabla de decisiones: ATT × Comportamiento de CMP × Acciones del SDK
| Estado de ATT | IDFA | Comportamiento del CMP | Acciones del SDK |
|---|---|---|---|
.notDetermined |
No | Espere el mensaje ATT y luego inicie CMP. | No inicialice los rastreadores todavía. |
.authorized |
Sí | Recopilar el consentimiento granular de CMP. | Habilite anuncios/análisis solo si CMP lo permite. |
.denied |
No | Tratar la publicidad y la elaboración de perfiles como si hubieran sido rechazadas. | Rechace programáticamente propósitos/proveedores de anuncios y luego muestre CMP para fines que no sean de seguimiento. |
.restricted |
No | Lo mismo que Denegado. | Rechace los propósitos/proveedores de anuncios y luego abra CMP. |
| iOS < 14 | N/A | Omitir ATT, utilizar sólo CMP. | Bloquear hasta que se resuelva CMP. |
Paso 7: Recetas de API compatibles con ATT
Rechazar propósitos/proveedores publicitarios cuando ATT lo negó o lo restringió
func rejectAdPurposesAndVendors(completion: @escaping () -> Void) {
let adPurposeIds = ["c52", "c53"] // Example purposes
CMPManager.shared.rejectPurposes(adPurposeIds, updateVendor: true)
}
(O) Concesión previa de propósitos/proveedores de anuncios cuando ATT lo autorice
func pregrantAdPurposesAndVendorsThenOpenCMP() {
let adPurposeIds = ["c52", "c53"]
CMPManager.shared.acceptPurposes(adPurposeIds, updatePurpose: true)
}
Paso 8: Vuelva a verificar la reanudación de la aplicación
El ATT puede cambiar en Configuración. Siempre vuelva a verificarlo al reanudar:
Paso 9: Casos extremos y alternativas
Paso 10: Pruebas y depuración
-
Utilizar nueva instalación para activar el mensaje ATT.
-
Probar todos los estados:
.authorized,.denied,.restricted,.notDetermined. -
Activar/desactivar ATT en Simulador/Dispositivo físico en Configuración → Privacidad y seguridad → Seguimiento.
-
Registra las salidas para confirmar que CMP se inicia solo después de que se resuelve ATT.
Paso 11: Mejores prácticas
- Nunca inicialice los rastreadores antes de que finalice el flujo ATT + CMP.
- Utilice los avisos previos con prudencia; nunca engañe a los usuarios, ya que podría provocar un bloqueo.
- No superponga la interfaz de usuario de CMP con el mensaje ATT.
- Permitir a los usuarios volver a abrir CMP en cualquier momento.
- Se espera que Apple rechace su revisión si el seguimiento se realiza antes del permiso de ATT.
Paso 12: Lista de verificación del desarrollador
-
Agregar
AppTrackingTransparency.framework. -
Agregar
NSUserTrackingUsageDescriptiona Info.plist. -
Verifique el estado de ATT al iniciar.
-
Opcionalmente mostrar aviso previo.
-
Solicitar ATT si
.notDetermined. -
Manejar el resultado de ATT (aceptar/rechazar proveedores/propósitos según corresponda).
-
Inicie CMP después de completar ATT.
-
Inicializar/bloquear los SDK solo después de que se resuelva CMP.
-
Vuelva a verificar ATT al reanudar la aplicación.
-
Proporcionar opción de reapertura de CMP.
-
Pruebe todos los flujos.







