[Android] 1. ConsentManager Integración SDK
La ConsentManager SDK para aplicaciones de Android 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.
¿Cómo funciona?
- Integre el SDK en la aplicación y configure los ajustes del SDK
- 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
- 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.
- 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. - 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
Repositorio en Bitbucket: https://bitbucket.org/consentmanager/android-consentmanager/src/master/
Gradle
Paso 1. Agregue el repositorio jitpack a su build.gradle raíz al final de los repositorios:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Paso 2. Agregue la dependencia a sus aplicaciones build.gradle. (Para obtener siempre la última versión, use el símbolo + para obtener las actualizaciones más recientes. Por ejemplo, siempre puede obtener las versiones más recientes para actualizaciones menores a través de 1.x.+)
dependencies {
implementation 'org.bitbucket.consentmanager:android-consentmanager:1.5.+'
}
Maven
Paso 1. Agrega el repositorio jitpack a tu build.gradle al final de los repositorios:
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
Paso 2. Agregue la dependencia a sus aplicaciones build.gradle. (Para obtener siempre la última versión en maven, puede usar diferentes métodos para rechazar el rango de versión. Puede buscarlos aquí )
<dependency>
<groupId>org.bitbucket.consentmanager</groupId>
<artifactId>android-consentmanager</artifactId>
<version>1.5.7</version>
</dependency>
Usando la biblioteca
Permisos
Este SDK requiere los siguientes permisos, asegúrese de agregarlos a su AndroidManifest.xml:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
Iniciar herramienta de consentimiento
Con el inicio de la aplicación (generalmente su función viewDidAppear) debe crear una instancia de la clase CMPConsentTool. Esto obtendrá 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 proporcionará los datos a la aplicación. Luego, la instancia se puede usar para obtener detalles de consentimiento del SDK para usarlo en la aplicación.
Para iniciar ConsentTool, vaya a su clase de destino y cree una instancia de CMPConsentTool como se muestra a continuación:
//...
import net.consentmanager.sdk.CMPConsentTool;
//...
public class MainActivity extends AppCompatActivity {
private CMPConsentTool consentTool;
//...
@Override
protected void onCreate(Bundle savedInstanceState) {
//..
consentTool = CMPConsentTool.createInstance(this, 123456, "consentmanager.mgr.consensu.org", "MyFavouriteApp", "");
}
//...
}
Para crear la instancia de CMPConsentTool necesita configurar la instancia. Deberá proporcionar el ID de CMP, el dominio del servidor, el nombre de una aplicación y un idioma. El ID de CMP y el dominio del servidor se pueden encontrar en su ConsentManager cuenta bajo Menú> Obtener código. El nombre de la aplicación se puede usar para distinguir diferentes aplicaciones en ConsentManager informes Para el idioma, puede usar una cadena vacía ("") para la detección automática o un código de idioma de 2 letras ("EN", "DE", "FR", etc.).
Los valores de configuración se pueden insertar de diferentes maneras:
a) Configuración de SDK a través de CMPConfig
Agregue las siguientes líneas a su código:
val config = CMPConfig.apply {
serverDomain = CMP_DOMAIN
appName = CMP_APP_NAME
language = LANG
id = APP_ID
}
val consentTool = CMPConsentTool.createInstance(this, config);
b) Configuración de SDK a través de createInstance()
Agregue la siguiente línea a su código:
consentTool = CMPConsentTool.createInstance(this, 1234567, "consentmanager.mgr.consensu.org", "MyFavouriteApp", "EN");
Usando el SDK
Verificar consentimiento
Para verificar si un proveedor o propósito tiene consentimiento, puede usar los dos métodos:
if(consentTool.hasPurposeConsent(this,"52",false))
{
if(consentTool.hasVendorConsent(this,"s26", false))
{
//do something with data
}
}
Ambos métodos hasPurposeConsent
y la histopatología de 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 la histopatología de Menú> Propósitos en tu ConsentManager .
- 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(this);
Pasar información de consentimiento a otras fuentes
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:
String consentData = CMPConsentTool.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);
Oyentes de eventos personalizados
Para agregar una lógica de proceso adicional, puede utilizar los detectores de eventos. Los siguientes detectores de eventos están disponibles:
Nombre |
ocurre
|
OnOpenCallback |
Oyente de evento cuando se abrió CMP |
OnCMPCoseCallback |
Oyente de evento cuando CMP está cerrado |
OnCMPNotOpenedCallback |
Oyente para eventos cuando no es necesario abrir CMP |
OnErrorCallback |
Listener for Event cuando hay un error en el proceso de gestión de consentimiento. |
Consentimiento de importación/exportación
Para importar o exportar el consentimiento puede utilizar la función exportCMPData(Contexto contexto) y la histopatología de importCMPData(Contexto contexto, String cmpData). Mira el ejemplo a continuación:
// Importing consent data if you like
CMPConsentTool.importCMPData(this, "${your consentString}");
// Instantiate CMPConsentTool()
consentTool = CMPConsentTool.createInstance(...)
// ... Your code here ...
// Exporting Consent data
String consentString = CMPConsentTool.exportCMPData(this);
La cadena de consentimiento que necesita pasar debe estar codificada en base64.
Diagrama de secuencia del SDK de CMP
Preferencias compartidas
El SDK establecerá los valores de preferencias compartidas para IAB TCF v1, IAB TCF v2, IAB USPrivacy y Google AC String. Estos valores se pueden leer utilizando el siguiente código:
Context mContext = getApplicationContext();
SharedPreferences mPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
SharedPreferences.OnSharedPreferenceChangeListener mListener;
mListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
if (key.equals([Specific Consent Key])) {
// Update Consent settings
}
}
};
mPreferences.registerOnSharedPreferenceChangeListener(mListener);
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 :
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 :
Desestablecer predeterminado - Los proveedores pueden usar este valor para determinar si se requiere el consentimiento para el propósito uno. |
IABTCF_UseNonStandardStacks |
Number :
|
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 la histopatología de 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 la histopatología de 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 la histopatología de 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 la histopatología de 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 la histopatología de 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 la histopatología de 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 la histopatología de 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 la histopatología de 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 la histopatología de 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 |
|
(Obsoleto) Bloqueo de contenido dinámico con marcador de posición webView
Esta función ha quedado obsoleta y se eliminará en el futuro. El motivo de la obsolescencia es que con la habilitación y deshabilitación de las API de propósito y proveedor, ya no es necesario crear un marcador de posición. Puede agregar su propia interfaz de usuario y su propia lógica comercial y activar y desactivar proveedores dinámicamente. En lugar de usar esta función, debe usar el enableVendorList() y la histopatología de deshabilitar lista de proveedores () funciones para administrar qué proveedores están habilitados o deshabilitados, y cree su propia interfaz de usuario para mostrar esta información al usuario.
El viewObject de marcador de posición se puede implementar para obtener la funcionalidad de bloqueo de contenido dinámico aquíPuede crear la vista con el siguiente método:
CMPPlaceholder placeholderView = CMPConsentTool.createPlaceholder(getApplicationContext(),CMPPlaceholderParams
.ofVendor("${vendorId}"), new CMPPlaceholderEventListener() {
@Override
public void vendorAccepted(WebView view) {
//... Actions to trigger if Consent is accepted
// Like showing Youtube Video View
}
});
Con el objeto Wrapper CMPPlaceholderParams
también puede pasar parámetros opcionales como textos personalizados o una imagen de vista previa opcional. Las funciones del constructor se llaman setCustomplaceholder(String headline, String mainText, String checkboxText, String buttonText)
y la histopatología de setOptionalImageUrl(String imageUrl)
.
La lógica empresarial requerida, cuando desee mostrar la vista y cuando no necesite ser aplicada por el desarrollador. Puede pasar la condición y las acciones necesarias mediante las devoluciones de llamada de EvenListener del CMPPlaceholderEventlistener
. Se debe implementar el siguiente evento requerido:
Necesario: vendorAccepted(CMPPlaceholderView view) { // Your logic }
Opcional: errorOccurred(String message) { // Error handling }