Información
Contenido

ConsentManager GDPR / CCPA SDK para iOS

La ConsentManager El SDK para aplicaciones de iOS implementa y proporciona funcionalidad para informar al usuario sobre la protección de datos y solicitar y obtener el consentimiento del usuario. Permite a los desarrolladores de aplicaciones integrar fácilmente ConsentManager servicio en su aplicación.

Estándares soportados

La ConsentManager GDPR / CCPA SDK para Android es compatible con los siguientes estándares de la industria:

  • IAB TCF v1
  • IAB TCF v2
  • IAB USPrivacy v1
  • ConsentManager vendedores personalizados / propósitos
  • Modo de consentimiento adicional de Google (cadena de CA de Google)

¿Cómo funciona?

  1. Integre el SDK en la aplicación y configure los ajustes del SDK
  2. Una vez que el SDK se integre en una aplicación, el SDK proporcionará funciones para el desarrollador de la aplicación con el fin de recuperar los datos de consentimiento
  3. Tan pronto como se inicie la aplicación, el SDK recuperará automáticamente la información del ConsentManager servidores para preparar el SDK para su uso.
  4. Se recomienda que, al iniciar la aplicación, la aplicación cree una instancia de clase CMPConsentTool. Una vez que se crea esto, el SDK mostrará automáticamente la pantalla de consentimiento si es necesario.
  5. Cuando la aplicación quiere procesar datos personales, debe "preguntar" al SDK si se dio el consentimiento para el propósito específico y el proveedor.

Instalación

Descargue el SDK

Descargue la última versión del SDK aquí: https://plugins.consentmanager.net/iOS-SDK.zip

El archivo zip contiene tres carpetas. ConsentManager y ConsentManager.framework y ConsentManagerExample. La carpeta ConsentManagerExample contiene un proyecto de muestra que ilustra el uso del SDK. La carpeta ConsentManager.framework contiene solo los archivos relacionados con el SDK (marco) en sí mismo para integrarlo en su propio proyecto. La carpeta ConsentManager contiene los archivos binarios del SDK (marco).

El SDK está configurado para iOS Versión 10 y superior.

Integración

Para integrar el SDK en su proyecto existente, siga estos pasos:

  1. Extrae los archivos de la carpeta ConsentManager.framework en la carpeta principal de tu aplicación:



  2. Haga clic en su proyecto y vaya a la pestaña General y expandir la parte debajo Marcos, bibliotecas y contenido incrustado:

  3. Si el módulo aún no está incrustado, haga clic en + (Más)> Agregar otro> Agregar archivos ...:

  4. Seleccione el botón ConsentManager.framework carpeta de esta proyecto y haga clic en Abierto:

  5. Ahora debería ver el Marco como "Incrustar y firmar" en la lista:

  6. Navegue a su Controlador de vista principal de su aplicación e importe el marco utilizando:
    #import <ConsentManager/CmpConsentTool.h>

Inicia el SDK

Con el inicio de la aplicación (generalmente su función viewDidAppear) usted debe crear una instancia de clase CMPConsentTool. Esto buscará automáticamente los datos necesarios de nuestro servidor y determinará si la pantalla de consentimiento debe mostrarse o no. Si es así, el SDK mostrará automáticamente la pantalla de consentimiento en este punto, recopilará los datos y los proporcionará a la aplicación. La instancia se puede usar para obtener detalles de consentimiento del SDK para usarla en la aplicación.

#import "ViewController.h"
#import <ConsentManager/CMPConsentTool.h>

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *GDPRConsentStringLabel;
@end

@implementation ViewController
static CMPConsentTool *cmpConsentTool = nil;

- (void)viewDidLoad {
    [super viewDidLoad];
}

- (void)viewDidAppear:(BOOL)animated {
    cmpConsentTool = [[CMPConsentTool alloc] init:@"consentmanager.mgr.consensu.org" addId:@"123456" addAppName:@"my%20Test%20App" addLanguage:@"DE" addViewController:self];
}

- (IBAction)showGDPRConsentTool:(id)sender {
    [cmpConsentTool openCmpConsentToolView];
}
@end

Ejemplo de Swift:

cmpConsentTool = CMPConsentTool.init("consentmanager.mgr.consensu.org", addId: "123456", addAppName: "my%20test%20app", addLanguage: "DE", add: self)

Tenga en cuenta que es importante inicializar el SDK en el método didAppear. De lo contrario, la vista puede no estar lista para usar y el SDK puede fallar.

Asegúrese de utilizar los datos de configuración correctos. Los datos de configuración se pueden encontrar en su ConsentManager cuenta en Menú> Obtener código.

Usando el SDK

Para verificar si un proveedor o propósito tiene consentimiento, puede usar los dos métodos:

if(consentTool.hasPurposeConsent("52", false))
{
    if(consentTool.hasVendorConsent("s26", false))
    {
        //do something with data
    }
}

Ambos métodos hasPurposeConsent y hasVendorConsent requiere dos parámetros:

  • id: cadena del proveedor o ID de propósito. Tenga en cuenta que las ID de proveedor pueden tener diferentes formatos ("123", "s123" y "c123"), verifique nuevamente con Menú> Proveedores y Menú> Propósitos en su ConsentManager cuenta.
  • isIABVendor / isIABPurpose: si el proveedor o el propósito es un proveedor / propósito que sigue el estándar IAB TCF, deberá establecer un verdadero, de lo contrario, un falso.

Recuerde: Todos los proveedores que no pertenecen al IAB tienen ID que comienzan con una "s" o "c" (por ejemplo, "s123"); Los proveedores que pertenecen a la IAB tienen ID que no comienzan con una "s" o "c".

Reabrir la pantalla de consentimiento

Para permitir que el usuario cambie las opciones, simplemente puede llamar openCmpConsentToolView():

consentTool.openCmpConsentToolView();

Swift:

cmpConsentTool!.openView()

En algunos casos, una aplicación nativa puede contener vistas web para mostrar ciertas cosas como publicidad o contenido. Para transmitir la información de consentimiento del SDK a la vista web, utilice la función:

consentData = CMPStorageConsentManager.exportCMPData(this);

Esto exportará la información de consentimiento y todos los datos adicionales que necesita el CMP. Luego puede pasar esta información al CMP que está en su vista web agregándola a la URL que se llama en la vista web:

myWebView.loadURL("https://mywebsite.com/....?cmpimport=" + consentData);

Compilar / Cargar en AppStore

Para compilar el SDK para la AppStore, es posible que desee utilizar el siguiente script para limpiar el directorio de trabajo:

APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
FRAMEWORK_NAME="ConsentManager.framework"
# Check if Framework is present.
FRAMEWORK_LOCATION=$(find "$APP_PATH" -name "$FRAMEWORK_NAME" -type d)
if [ -z $FRAMEWORK_LOCATION ]; then
echo "Couldn't find ConsentManager.framework in $APP_PATH. Make sure 'Embed Frameworks' build phase is listed before the 'Strip Unused Architectures' build phase."
exit 1
fi
# This script strips unused architectures
find "$APP_PATH" -name "$FRAMEWORK_NAME" -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
EXTRACTED_ARCHS=()
for ARCH in $ARCHS
do
echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
done
echo "Merging extracted architectures: ${ARCHS}"
lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
rm "${EXTRACTED_ARCHS[@]}"
echo "Replacing original executable with thinned version"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
done

Preferencias de NSUserDefaults

El SDK establecerá NSUserDefaults valores para IAB TCF v1, IAB TCF v2, IAB USPrivacy y Google AC String.

Se definen las siguientes claves:

IAB TCF v1
IABConsent_CMPPresent Boolean: Se establece en verdadero si un CMP que implementa esta especificación está presente en la aplicación. Idealmente establecido por el editor lo antes posible, pero también puede ser configurado por el CMP alternativamente.
IABConsent_SubjectToGDPR String 1 - (sujeto a GDPR), 0 - (no sujeto a GDPR), Nulo - indeterminado (predeterminado antes de la inicialización). Se alinea con IAB OpenRTB GDPR Advisory. Decidió ser String, tener el estado no inicializado.
IABConsent_ConsentString String: Cadena de consentimiento
IABConsent_ParsedPurposeConsents String (de "0" y "1") donde el carácter en la posición N indica el estado de consentimiento para la ID de propósito N como se define en la Lista global de proveedores. Cadena de consentimiento otorgado para permitir una verificación simple. El primer personaje de la izquierda es el Propósito 1, ...
IABConsent_ParsedVendorConsents String (de "0" y "1") donde el carácter en la posición N indica el estado de consentimiento para la identificación del proveedor N como se define en la Lista global de proveedores. Cadena de consentimiento otorgado para permitir una verificación simple. El primer personaje de la izquierda es el Vendedor 1, ...
IAB TCF v2
IABTCF_CmpSdkID Number: El ID entero sin signo del SDK de CMP
IABTCF_CmpSdkVersion Number: El número de versión entero sin signo de CMP SDK
IABTCF_PolicyVersion Number: El entero sin signo que representa la versión del TCF a la que se adhieren estos consentimientos.
IABTCF_gdprApplies Number:

1 GDPR se aplica en el contexto actual

0 - GDPR hace no aplicar en el contexto actual

Desarmado - indeterminado (predeterminado antes de la inicialización)

IABTCF_PublisherCC String: Código de dos letras ISO 3166-1 alfa-2 - Defecto: AA (desconocido)
IABTCF_PurposeOneTreatment Number:

0 - no hay un tratamiento especial para el propósito uno

1 - propósito uno no revelado

Desestablecer predeterminado - 0

Los proveedores pueden usar este valor para determinar si se requiere el consentimiento para el propósito uno.

IABTCF_UseNonStandardStacks Number:

1 - CMP usó una pila no estándar

0 - CMP no usó una pila no estándar

IABTCF_TCString String: Cadena TC codificada completa
IABTCF_VendorConsents Binary String: Los '0' or '1' en la posición n - dónde nLa indexación comienza en 0 - indica el estado de consentimiento para la identificación del proveedor n + 1; false y true respectivamente. p.ej. '1' en el índice 0 es consentimiento true para la identificación del proveedor 1
IABTCF_VendorLegitimateInterests Binary String: Los '0' or '1' en la posición n - dónde nLa indexación comienza en 0 - indica el estado de interés legítimo para la identificación del proveedor n + 1; false y true respectivamente. p.ej. '1' en el índice 0 se establece un interés legítimo true para la identificación del proveedor 1
IABTCF_PurposeConsents Binary String: Los '0' or '1' en la posición n - dónde nLa indexación comienza en 0 - indica el estado de consentimiento para la identificación del propósito n + 1; false y true respectivamente. p.ej. '1' en el índice 0 es consentimiento true para fines de identificación 1
IABTCF_PurposeLegitimateInterests Binary String: Los '0' or '1' en la posición n - dónde nLa indexación comienza en 0 - indica el estado de interés legítimo para la identificación del propósito n + 1; false y true respectivamente. p.ej. '1' en el índice 0 se establece un interés legítimo true para fines de identificación 1
IABTCF_SpecialFeaturesOptIns Binary String: Los '0' or '1' en la posición n - dónde nLa indexación comienza en 0 - indica el estado de suscripción para ID de función especial n + 1; false y true respectivamente. p.ej. '1' en el índice 0 es opt-in true para ID de función especial 1
IABTCF_PublisherRestrictions{ID} String ['0','1', or '2']: El valor en la posición n - dónde nLa indexación comienza en 0 - indica el tipo de restricción del editor (0-2) para el proveedor n + 1; (consulte Tipos de restricciones de editor). p.ej. '2' en el índice 0 es restrictionType 2 para la identificación del proveedor 1. {ID} se refiere a la identificación del propósito.
IABTCF_PublisherConsent Binary String: Los '0' or '1' en la posición n - dónde nLa indexación comienza en 0 - indica el estado de consentimiento del propósito para la identificación del propósito n + 1 para el editor, ya que corresponden a los propósitos de la Lista global de proveedores; false y true respectivamente. p.ej. '1' en el índice 0 es consentimiento true para fines de identificación 1
IABTCF_PublisherLegitimateInterests Binary String: Los '0' or '1' en la posición n - dónde nLa indexación comienza en 0 - indica el estado de interés legítimo del propósito para la identificación del propósito n + 1 para el editor, ya que corresponden a los propósitos de la Lista global de proveedores; false y true respectivamente. p.ej. '1' en el índice 0 se establece un interés legítimo true para fines de identificación 1
IABTCF_PublisherCustomPurposesConsents Binary String: Los '0' or '1' en la posición n - dónde nLa indexación comienza en 0 - indica el estado de consentimiento del propósito para la ID de propósito personalizado del editor n + 1 para el editor; false y true respectivamente. p.ej. '1' en el índice 0 es consentimiento true para ID de propósito personalizado 1
IABTCF_PublisherCustomPurposesLegitimateInterests Binary String: Los '0' or '1' en la posición n - dónde nLa indexación comienza en 0 - indica el estado de interés legítimo de propósito para la identificación de propósito personalizado del editor n + 1 para el editor; false y true respectivamente. p.ej. '1' en el índice 0 se establece un interés legítimo true para ID de propósito personalizado 1
IAB USPrivacidad
IABUSPrivacy_String String: Se alinea con el IAB OpenRTB CCPA Advisory. La cadena codifica todas las opciones e información.
Cadena AC de Google
IABTCF_AddtlConsent

String: Se alinea con la especificación técnica del Modo de consentimiento adicional de Google.

Descripción general de la API

- (vacío) openCmpConsentToolView; Muestra una vista modal con la vista web de consentimiento, sin preguntar al servidor, si se necesita un nuevo consentimiento. Cuando se abra la vista web, se llamará a openListener. Si el cumplimiento es aceptado o rechazado, se llamará a una función de cierre. Puede configurar estas funciones por su cuenta y pasarlas por alto o después de la inicialización. Si desea agregar un closeListener solo para esta llamada de este método, puede sobrecargar esta función con una función closeListener adicional.
- (void) openCmpConsentToolView: (void (^) (void)) closeListener; Muestra una vista modal con la vista web de consentimiento, sin preguntar al servidor, si se necesita un nuevo consentimiento. Cuando se abra la vista web, se llamará a openListener. Si el cumplimiento es aceptado o rechazado, se llamará a una función de cierre. Puede configurar estas funciones por su cuenta y pasarlas por alto o después de la inicialización. Si desea agregar un closeListener solo para esta llamada de este método, puede sobrecargar esta función con una función closeListener adicional. CloseListener es una función llamada sin parámetro y no devuelve valores. Se llamará asincrónico.
- (NSString *) getVendorsString; Si la pantalla consentScreen está cerrada, la lógica de ConsentString devuelve una versión extendida de consentmanager. La cadena de proveedor adicional contiene todos los proveedores que no se mencionan en CMPString. Esta cadena será devuelta. Cada proveedor está separado por un "_" y tendrá un "_" antes de sí mismo. "_C23_" sería un VendorsString válido generado por ConsentManager. Un VendorsString vacío será nulo, “” o “__”.
- (NSString *) getPurposesString; Si la pantalla consentScreen está cerrada, la lógica de ConsentString devuelve una versión extendida de consentmanager. La Cadena de Propósitos adicional contiene todos los propósitos que no se mencionan en CMPString. Esta cadena será devuelta. Cada Propósito está separado por un "_" y tendrá un "_" antes de sí mismo. "_P23_" sería un PurposeString válido generado por ConsentManager. Una PurposeString vacía será nula, “” o “__”.
- (NSString *) getUSPrivacyString; Devuelve la cadena de privacidad de EE. UU., Que fue devuelta por el consentimiento del usuario en la pantalla de consentimiento de CMP.
- (BOOL) hasVendorConsent: (NSString *) vendorId vendorIsV1orV2: (BOOL) isIABVendor; Devuelve si un proveedor determinado tiene los derechos para configurar cookies. El parámetro vendorIsV1orV2 afirma, si el proveedor es mencionado por el IABString regular, o si está contenido en el vendorString generado por consentmanager.
- (BOOL) hasPurposeConsent: (NSString *) propósitoId propósitoIsV1orV2: (BOOL) isIABPurpose; Devoluciones si se acepta un Propósito determinado. El parámetro propósitoIsV1orV2 afirma, si el propósito es mencionado por el IABString regular, o si está contenido en el propósitoString generado por consentmanager.
- (BOOL) hasPurposeConsent: (int) propósitoId para el proveedor: (int) vendorId;

Devoluciones, si se otorgó el consentimiento para un propósito para un proveedor específico. Este Método solo dará una respuesta válida, si el Consentimiento fue dado en la versión V2.

- (id) init: (NSString *) dominio addId: (NSString *) userId addAppName: (NSString *) appName addLanguage: (NSString *) idioma addViewController: (UIViewController *) viewController;

- (id) init: (NSString *) dominio addId: (NSString *) userId addAppName: (NSString *) appName addLanguage: (NSString *) idioma addViewController: (UIViewController *) viewController addOpenListener: (void (^) (void)) openListener;

- (id) init: (NSString *) dominio addId: (NSString *) userId addAppName: (NSString *) appName addLanguage: (NSString *) idioma addViewController: (UIViewController *) viewController addCloseListener: (void (^) (void)) closeListener;

- (id) init: (NSString *) dominio addId: (NSString *) userId addAppName: (NSString *) appName addLanguage: (NSString *) idioma addViewController: (UIViewController *) viewController addOpenListener: (void (^) (void)) openListener addCloseListener: (void (^) (void)) closeListener;

- (id) init: (NSString *) dominio addId: (NSString *) userId addAppName: (NSString *) appName addLanguage: (NSString *) idioma addViewController: (UIViewController *) viewController autoupdate: (BOOL) autoupdate;

- (id) init: (NSString *) dominio addId: (NSString *) userId addAppName: (NSString *) appName addLanguage: (NSString *) idioma addViewController: (UIViewController *) viewController autoupdate: (BOOL) autoupdate addOpenListener: (void ( ^) (void)) openListener;

- (id) init: (NSString *) dominio addId: (NSString *) userId addAppName: (NSString *) appName addLanguage: (NSString *) idioma addViewController: (UIViewController *) viewController autoupdate: (BOOL) autoupdate addCloseListener: (void ( ^) (void)) closeListener;

- (id) init: (NSString *) dominio addId: (NSString *) userId addAppName: (NSString *) appName addLanguage: (NSString *) idioma addViewController: (UIViewController *) viewController autoupdate: (BOOL) autoupdate addOpenListener: (void ( ^) (void)) openListener addCloseListener: (void (^) (void)) closeListener;

- (id) init: (CMPConfig *) config withViewController: (UIViewController *) viewController;

- (id) init: (CMPConfig *) config withViewController: (UIViewController *) viewController addOpenListener: (void (^) (void)) openListener;

- (id) init: (CMPConfig *) config withViewController: (UIViewController *) viewController addCloseListener: (void (^) (void)) closeListener;

- (id) init: (CMPConfig *) config withViewController: (UIViewController *) viewController addOpenListener: (void (^) (void)) openListener addCloseListener: (void (^) (void)) closeListener;

- (id) init: (CMPConfig *) config withViewController: (UIViewController *) viewController autoupdate: (BOOL) autoupdate;

- (id) init: (CMPConfig *) config withViewController: (UIViewController *) viewController autoupdate: (BOOL) autoupdate addOpenListener: (void (^) (void)) openListener;

- (id) init: (CMPConfig *) config withViewController: (UIViewController *) viewController autoupdate: (BOOL) autoupdate addCloseListener: (void (^) (void)) closeListener;

- (id) init: (CMPConfig *) config withViewController: (UIViewController *) viewController autoupdate: (BOOL) autoupdate addOpenListener: (void (^) (void)) openListener addCloseListener: (void (^) (void)) closeListener;

Crea una nueva instancia de CMPConsentTool.

@ param domain = La URL del dominio de consentmanager p.ej.: "www.consentmanager.net"

@ param userId = El ID de su cuenta de consentmanagers webste por ejemplo ,: 123

@ param appName = El nombre de su aplicación, por ejemplo: "Mi aplicación de prueba"

@param language = El idioma en el que se debe mostrar el consentimiento, por ejemplo: "de"

@param viewController = La instancia de ViewController principal de la aplicación

@param autoupdate = Si se establece, la aplicación comprobará por sí misma, si se necesita un nuevo consentimiento, si la aplicación se abrirá desde el fondo.

@param openListener = Este oyente dado como función se llamará asincrónico poco antes de que se abra la pantalla de consentimiento de CMP.

@param closeListener = Este Listener se llamará asincrónico, si el usuario dio su consentimiento y se cerró CMPConsentScreen. Este Oyente NO se llama, si el Usuario cierra la aplicación, sin dar su consentimiento.

@param config = El dominio de parámetros, userId, appName, idioma en un objeto de tipo CMPConfig.

Puede sobrecargar la función de inicialización, como puede ver en los siguientes constructores:

+ (NSString *) exportCMPData; Exporta la cadena CMPData actual. Puede importar fácilmente esta cadena en cualquier otro dispositivo con la función importCMPData.
+ (BOOL) importCMPData: (NSString *) cmpData; Importa la cadena CMPData proporcionada. Puede exportar fácilmente esta cadena a cualquier otro dispositivo con la función exportCMPData.
- (BOOL) llamado ThisDay; devuelve, si el CMPConsent Manager Server se solicitó hoy, o el consentmanager ya se le preguntó al servidor, si es necesario volver a mostrar la pantalla de consentimiento de CMP.
- (BOOL) needAcceptance; devuelve, ya sea que el usuario necesite dar un consentimiento, porque no lo hizo en el pasado, o porque el servidor de consentimiento regresó, que se requiere un nuevo consentimiento.
+ (anular) reiniciar; restablece todos los datos establecidos por consentCMPTool en las Preferencias compartidas.

Volver arriba