Privacidad del SDK para iOS
Los SDK móviles de Xandr incluyen soporte para clientes para la Plataforma global de privacidad (GPP), el Reglamento General de Protección de Datos (RGPD) y la Ley de Protección del Consumidor de California (CCPA) y la Ley de Servicios Digitales (DSA).
La Plataforma de privacidad global (GPP) permite a anunciantes, editores y proveedores de tecnología adaptarse a las demandas normativas en todos los mercados. EL RGPD proporciona normas para el procesamiento, el movimiento y la protección de datos personales dentro de la Unión Europea. CCPA crea nuevos derechos de consumidor relacionados con el acceso, la eliminación y el uso compartido de información personal que recopilan las organizaciones. La DSA es una medida legislativa clave de la Unión Europea destinada a mejorar la transparencia en la publicidad digital, con un objetivo fundamental de promover la transparencia, la rendición de cuentas y la protección de los usuarios en servicios en línea.
Advertencia
Este recurso no debe interpretarse como asesoramiento legal y Xandr no garantiza el cumplimiento de ninguna ley o reglamento. Tenga en cuenta que, dado que cada empresa y su recopilación, uso y almacenamiento de datos personales son diferentes, también debe buscar asesoramiento legal independiente en relación con las obligaciones establecidas en la normativa europea, incluidos el RGPD y la directiva ePrivacy existente. Solo un abogado puede proporcionarle asesoramiento legal específicamente adaptado a su situación. Nada en esta guía está pensado para proporcionarle, o debe usarse como sustituto de, asesoramiento legal adaptado a su negocio.
Nota:
Los publicadores son responsables de proporcionar aviso, transparencia y elección y de recopilar el consentimiento de sus usuarios de acuerdo con las directivas de Framework, ya sea mediante su propio proveedor de administración de consentimiento o trabajando con un proveedor.
Tenga en cuenta que nuestras directivas de servicio (para comprar, vender y proveedores de datos) incluyen obligaciones específicas de privacidad de las que debe tener en cuenta.
Todos los SDK de proveedor (incluidos los SDK de mediación) son responsables de buscar información de consentimiento y proveedor aprobados por sí mismos; Xandr no pasa esta información a estos SDK.
Reglamento general de protección de datos (RGPD)
Con el fin de que nuestros clientes cumplan sus requisitos de transparencia, notificación y elección/consentimiento en virtud del RGPD y la Directiva ePrivacy existente, Xandr apoya el Marco de transparencia & consentimiento de IAB Europa (el "Marco").
Esta es una referencia para los editores de aplicaciones móviles que usan el SDK móvil de Xandr para mostrar aviso, transparencia y elección a los usuarios finales ubicados en el EEE y señalar a proveedores aprobados y, si es necesario, pasar el consentimiento a Xandr y a orígenes de demanda y sus proveedores a través de la plataforma Xandr.
Xandr proporciona tres API en mobile SDK para que los publicadores de aplicaciones móviles usen framework. (Estas API están disponibles en mobile SDK versión 4.8+ para Android y 4.7.1+ para iOS). Estas API le permiten:
- definir si el usuario se encuentra en el Espacio Económico Europeo (el "EEE") y si debe aplicarse la normativa europea de privacidad
- establecer la cadena de consentimiento de IAB Europe(IAB)
El SDK conservará esta información y se agregará a cada llamada de anuncio para aplicar controles de plataforma.
Los publicadores o plataformas de administración de consentimiento (CMP) pueden almacenar estos valores en una interfaz SharedPreferences (como se define en Mobile In-App CMP API v2.0: Transparency & Consent Framework) en lugar de pasarlos a través de las nuevas API, y el SDK leerá los valores como reserva.
/** * Set the consentRequired value in the SDK
*
* @param true if subject to GDPR regulations, false otherwise
*/
[ANGDPRSettings setConsentRequired:1];
/**
* Set the consent string in the SDK
*
* @param A valid Base64 encode consent string as per https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework
*/
[ANGDPRSettings setConsentString:@"BOMyQRvOMyQRvABABBAAABAAAAAAEA"];
/**
* Set the purpose consents in the SDK
*
* @param A valid Binary String: The '0' or '1' at position n – where n's indexing begins at 0 – indicates the consent status for purpose ID n+1; false and true respectively. eg. '1' at index 0 is consent true for purpose ID 1
*/
[ANGDPRSettings setPurposeConsents:@"10101001"];
Nota:
Para garantizar la monetización adecuada y la segmentación pertinente, el SDK debe estar habilitado para enviar la información del dispositivo. Establecer la consentRequired
marca y purposeConsents
correctamente ayudará a garantizar que se envía la información adecuada del dispositivo. Consulte la tabla siguiente para determinar si se pasarán o no los detalles del dispositivo.
En la tabla siguiente se describen las acciones realizadas para los distintos purposeConsents
valores en combinación con consentRequired
los valores.
deviceAccessConsent | deviceAccessConsent= true | deviceAccessConsent= false | deviceAccessConsent= undefined |
---|---|---|---|
consentRequired=undefined<br>(gdprApplies = undefined) |
El SDK leerá y pasará la información de IDFA/AAID al servidor. | El SDK no leerá ni pasará la información de IDFA/AAID al servidor. | El SDK leerá y pasará la información de IDFA/AAID al servidor. |
consentRequired=true<br>(gdprApplies = true) |
El SDK leerá y pasará la información de IDFA/AAID al servidor. | El SDK no leerá ni pasará la información de IDFA/AAID al servidor. | El SDK no leerá ni pasará la información de IDFA/AAID al servidor. |
consentRequired=false<br>(gdprApplies = false) |
El SDK leerá y pasará la información de IDFA/AAID al servidor. | El SDK no leerá ni pasará la información de IDFA/AAID al servidor. | El SDK leerá y pasará la información de IDFA/AAID al servidor. |
Xandr proporciona tres API que permiten a los usuarios del SDK establecer, recuperar y borrar controles del mecanismo de señal de usuario de privacidad de EE. UU. El laboratorio tecnológico de IAB ha formalizado y adoptado la cadena "us_privacy" como mecanismo para codificar datos sobre la información divulgada a las elecciones de usuarios y usuarios en virtud de varias leyes de privacidad de EE. UU., empezando por el CCPA.
Ley de privacidad del consumidor de California (CCPA)
El SDK conservará esta información y se agregará a cada llamada de anuncio para aplicar controles de plataforma.
Las plataformas de administración de publicadores y consentimientos (CMP) pueden almacenar estos valores en una interfaz SharedPreferences (tal como se define en el mecanismo de cumplimiento de CCPA de IAB) en lugar de pasarlos a través de las nuevas API, y el SDK leerá los valores como reserva.
/**
* Set the IAB US Privacy String in the SDK
*/
[ANUSPrivacySettings setUSPrivacyString:@"1YNN"];
/**
* Get the IAB US Privacy String in the SDK.
*/
[ANUSPrivacySettings getUSPrivacyString]
/**
* Reset the value of IAB US Privacy String that was previously set using setUSPrivacyString
*/
[ANUSPrivacySettings reset];
Plataforma de privacidad global (GPP)
Global Privacy Platform es un único protocolo diseñado para simplificar la transmisión de señales de privacidad, consentimiento y elección del consumidor desde sitios web y aplicaciones a proveedores de tecnología de anuncios. Estas señales se empaquetan en una carga estandarizada y fácil de comunicar denominada cadena GPP. Los datos de GPP previamente analizados, así como la cadena GPP, se almacenarán en [NSUserDefaults](https:/ developer.apple.com/documentation/foundation/nsuserdefaults#1664798?language=objc) (iOS). Esto permitirá lo siguiente:
Proveedores para acceder fácilmente a los datos de GPP.
Datos de GPP que se conservarán entre sesiones de aplicación.
Los datos de GPP se van a portátiles entre CMP para proporcionar flexibilidad para que un publicador intercambie un SDK de CMP por otro.
Proveedores dentro de una aplicación para evitar la duplicación de código, ya que no es necesario incluir un descodificador de cadenas GPP al tiempo que se habilitan todos los casos de uso típicos.
Nota:
Si un publicador decide quitar un SDK de CMP de su aplicación, es responsable de borrar todos los valores vestigios IABGPP_* para los usuarios para que los proveedores no sigan usando los datos de GPP en ellos.
A continuación, el SDK de Xandr leerá los valores de NSUserDefault que se pasan a la llamada de anuncio. A continuación se muestran las cadenas que el SDK consultará desde :
Nombre de la clave Tipo de datos Descripción IABGPP_HDR_GppString
string Cadena de consentimiento completa en su forma codificada. Por ejemplo, "DBACNYA~CPXxRfAPXxRfAAfKABENB-CgAAAAAAAAAAYgAAAAAAA~1YNN" IABGPP_GppSID
string Se considera que los identificadores de sección están en vigor. Varios identificadores se separan por subrayado, por ejemplo, "2_3"
Ley de Servicios Digitales (DSA)
La Ley de Servicios Digitales (DSA) supervisa a los intermediarios y plataformas en línea, donde su objetivo principal es detener las actividades ilegales y perjudiciales en Internet y mitigar la difusión de la desinformación. La DSA es una medida legislativa clave de la Unión Europea destinada a mejorar la transparencia en la publicidad digital, con un objetivo fundamental de promover la transparencia, la rendición de cuentas y la protección de los usuarios en servicios en línea.
Establezca valores DSA en el SDK:
A continuación, el SDK pasará estos valores a la llamada de anuncio.
Ejemplo de código: Objetivo C
/**
* Set the DSA information requirement.
* 0 = Not required
* 1 = Supported, bid responses with or without DSA object will be accepted
* 2 = Required, bid responses without DSA object will not be accepted
* 3 = Required, bid responses without DSA object will not be accepted, Publisher is an Online Platform
*/
[ANDSASettings.sharedInstance setDsaRequired:1];
/**
* Set if the publisher renders the DSA transparency info.
* 0 = Publisher can't render
* 1 = Publisher could render depending on adrender
* 2 = Publisher will render
*/
[ANDSASettings.sharedInstance setPubRender:0];
/**
Set the transparency list using the provided list of ANDSATransparencyInfo.
Initializes an ANDSATransparencyInfo instance with the specified domain and params.
*/
NSMutableArray<ANDSATransparencyInfo *> *transparencyList = [NSMutableArray array];
[transparencyList addObject:[[ANDSATransparencyInfo alloc] initWithDomain:@"example.com" andDSAParams:@[@1, @2, @3]]];
[transparencyList addObject:[[ANDSATransparencyInfo alloc] initWithDomain:@"example.net" andDSAParams:@[@4, @5, @6]]];
[ANDSASettings.sharedInstance setTransparencyList:transparencyList];
Ejemplo de código: Swift
/**
* Set the DSA information requirement.
* 0 = Not required
* 1 = Supported, bid responses with or without DSA object will be accepted
* 2 = Required, bid responses without DSA object will not be accepted
* 3 = Required, bid responses without DSA object will not be accepted, Publisher is an Online Platform
*/
ANDSASettings.sharedInstance().dsaRequired = 1
/**
* Set if the publisher renders the DSA transparency info.
* 0 = Publisher can't render
* 1 = Publisher could render depending on adrender
* 2 = Publisher will render
*/
ANDSASettings.sharedInstance().pubRender = 0
/**
Set the transparency list using the provided list of ANDSATransparencyInfo.
Initializes an ANDSATransparencyInfo instance with the specified domain and params.
*/
var transparencyList : [ANDSATransparencyInfo] = []
let info1 = ANDSATransparencyInfo(domain: "example.com", andDSAParams: [1, 2, 3])
transparencyList.append(info1)
let info2 = ANDSATransparencyInfo(domain: "example.net", andDSAParams: [4, 5, 6])
transparencyList.append(info2)
ANDSASettings.sharedInstance().transparencyList = transparencyList
Recuperación de los valores de DSA establecidos en el SDK
// Objective C
NSInteger dsaRequired = ANDSASettings.sharedInstance.dsaRequired;
NSInteger pubRender = ANDSASettings.sharedInstance.pubRender;
NSMutableArray<ANDSATransparencyInfo *> *transparencyList = [ANDSASettings.sharedInstance.transparencyList mutableCopy];
for (ANDSATransparencyInfo *transparencyInfo in transparencyList) {
NSString *domain = transparencyInfo.domain ?: @"";
NSArray<NSNumber *> *params = transparencyInfo.dsaparams ?: @[];
}
// Swift
let dsaRequired = ANDSASettings.sharedInstance().dsaRequired
let pubRender = ANDSASettings.sharedInstance().pubRender
if let transparencyList = ANDSASettings.sharedInstance().transparencyList {
for transparencyInfo in transparencyList {
let domain = transparencyInfo.domain ?? ""
let params = transparencyInfo.dsaparams ?? []
}
}
Recuperar valores de respuesta de DSA:
Ejemplo de código: Objetivo C
- (void)requestBannerAd
{
// Make a banner ad view.
self.banner = [ANBannerAdView adViewWithFrame:CGRectMake(0, 0, 300, 250) placementId:@“1” adSize:CGSizeMake(300,250)];
self.banner.delegate = self;
//... Add required configurations
[self.banner loadAd];
}
// On Ad Loaded
- (void)adDidReceiveAd:(id)ad {
NSLog(@“Ad did receive ad”);
/**
* Retrieve on whose behalf the ad is displayed.
*/
NSString *behalf = self.banner.adResponseInfo.dsaResponseInfo.behalf;
/**
* Retrieve who paid for the ad.
*/
NSString *paid = self.banner.adResponseInfo.dsaResponseInfo.paid;
/**
* Retrieve the transparency user parameters info
*/
for (ANDSATransparencyInfo *transparencyInfo in self.banner.adResponseInfo.dsaResponseInfo.transparencyList) {
NSString *domain = transparencyInfo.domain;
NSArray<NSNumber *> *params = transparencyInfo.dsaparams;
}
/**
* Retrieve indicating if the buyer/advertiser will render DSA transparency info.
* 0 = buyer/advertiser will not render
* 1 = buyer/advertiser will render
*/
NSInteger adRender = self.banner.adResponseInfo.dsaResponseInfo.adRender;
}
Ejemplo de código: Swift
func requestBannerAd() {
// Make a banner ad view.
self.banner = ANBannerAdView(frame: CGRect(origin: CGPoint(x: 0,y :0), size: CGSize(width: 300, height: 250)), placementId: “1”, adSize: CGSize(width: 300, height: 250))
self.banner!.rootViewController = self
self.banner!.delegate = self
//... Add required configurations
self.banner!.loadAd()
}
// On Ad Loaded
func adDidReceiveAd(_ ad: Any) {
print(“Ad did receive ad”)
/**
* Retrieve on whose behalf the ad is displayed.
*/
let behalf : String = (self.banner?.adResponseInfo?.dsaResponseInfo?.behalf)!
/**
* Retrieve who paid for the ad.
*/
let paid : String = (self.banner?.adResponseInfo?.dsaResponseInfo?.paid)!
/**
* Retrieve the transparency user parameters info
*/
if let transparencyList = self.banner?.adResponseInfo?.dsaResponseInfo?.transparencyList as? [ANDSATransparencyInfo] {
for transparencyInfo in transparencyList {
let domain = transparencyInfo.domain
let params = transparencyInfo.dsaparams as? [Int]
}
}
/**
* Retrieve indicating if the buyer/advertiser will render DSA transparency info.
* 0 = buyer/advertiser will not render
* 1 = buyer/advertiser will render
*/
let adRender : NSInteger = (self.banner?.adResponseInfo?.dsaResponseInfo?.adRender)!
}
Nota:
ANDSAResponseInfo se puede recuperar mediante la instancia de VideoAd, la instancia de vista de anuncios intersticiales y la respuesta de anuncios nativos, además de la vista de anuncios de Banner.
Objective C
// For interstitialAd once adDidReceiveAd is callback
NSString* interstitialAdDSAResponseInfo = self.interstitialAd.adResponseInfo.dsaResponseInfo; // same will be followed to get other dsaResponseInfo from interstitialAd
// For videoAd once adDidReceiveAd is callback
NSString* videoAdDSAResponseInfo = self.videoAd.adResponseInfo.dsaResponseInfo; // same will be followed to get other dsaResponseInfo from videoAd
// For nativeAd once didReceiveResponse is callback
ANAdResponseInfo nativeAdResponseInfo = nativeAdResponse;
NSString* nativeAdDSAResponseInfo = nativeAdResponseInfo.dsaResponseInfo; // same will be followed to get other dsaResponseInfo from videoAd
// Swift
// For interstitialAd once adDidReceiveAd is callback
let interstitialAdDSAResponseInfo? : String = (self.interstitialAd.?.adResponseInfo?.dsaResponseInfo?)! // same will be followed to get other dsaResponseInfo from interstitialAd
// For videoAd once adDidReceiveAd is callback
let videoAdDSAResponseInfo? : String = (self.videoAd.?.adResponseInfo?.dsaResponseInfo?)! // same will be followed to get other dsaResponseInfo from videoAd
// For nativeAd once didReceiveResponse is callback
let nativeAdDSAResponseInfo : String = (self.nativeAdResponse.?.adResponseInfo?.dsaResponseInfo?)! // same will be followed to get other dsaResponseInfo from nativeAd
Manifiesto de privacidad de Apple
El manifiesto de privacidad de Apple describe los datos que recopila la aplicación o el SDK de terceros. A partir de la versión 8.11.4 del SDK, hemos agregado compatibilidad con el requisito de archivo de manifiesto de privacidad de Apple para SDK de terceros. Para recibir automáticamente el archivo de manifiesto de privacidad, las aplicaciones de los editores deben usar la versión 8.11.4 o posterior del SDK. Para obtener más información, consulte Manifiesto de privacidad de Apple.