Comply with GDPR using APIs

Cumplimiento con el GDPR

El Reglamento General de Protección de Datos (GDPR) es el conjunto de normas de la UE en materia de protección de datos y privacidad de los ciudadanos de la Unión Europea. A fin de cumplir con el GDPR, las marcas que controlan datos personales tienen la obligación de cumplir con las solicitudes de acceso, portabilidad, rectificación y borrado de datos personales en el plazo de un mes.

En el sector de la atribución móvil, es imposible saber de antemano cuáles usuarios son ciudadanos europeos. Por lo tanto, el GDPR se aplica a todos los usuarios móviles, sean o no europeos.

La Iniciativa del GDPR

A fin de abordar y gestionar las solicitudes de los sujetos de datos y cumplir con el GDPR, AppsFlyer, conjuntamente con mParticle, Amplitude y Braze, iniciaron el protocolo OpenGDPR.

OpenGDPR es un marco de código abierto y unificado que facilita la cooperación entre empresas de tecnología para el uso justo y transparente de los datos de consumidores. Les permite a los proveedores tomar medidas relativas a la privacidad de los datos con facilidad en varios sistemas para procesar y almacenar datos de clientes.

Puede leer más sobre la iniciativa aquí.

Entidades según el GDPR

Sujeto de datos El usuario final de la aplicación móvil cuyos datos se recopilan.
Controlador de datos El anunciante determina el propósito y el medio por el cual se procesan los datos personales.
Procesador de datos AppsFlyer y sus socios procesan datos personales en nombre del controlador de datos.

Requisitos del GDPR

En el GDPR se detallan los derechos obligatorios del sujeto de datos, con los cuales debe cumplir el anunciante.

Derechos

Definición según el GDPR

Cómo ayuda AppsFlyer al Controlador

Derecho de acceso

  • Si lo solicitan, los sujetos de datos tienen derecho a saber si, por qué y por cuánto tiempo el controlador procesará sus datos.
  • Si los datos se comparten con terceros (como AppsFlyer), los sujetos de datos tienen derecho a saber quiénes son esos terceros.
  • También tienen derecho a saber qué categorías de datos se procesan.
  • Si hay procesamiento automatizado que pudiera afectarlos significativamente.
Cuando se envía una solicitud de "acceso", los Controladores de datos reciben una copia de los datos personales procesados de los sujetos de datos.

Derecho a la portabilidad de los datos

El sujeto de datos debe recibir todos sus datos personales en un formato estructurado, comúnmente utilizado y de lectura mecánica, como un archivo CSV.

Al enviar una solución de "portabilidad", el Controlador de datos recibe una copia de los datos personales procesados del Sujeto de datos.

Derecho a la rectificación

Permite que los sujetos de datos corrijan sus datos si ven que son inexactos, erróneos o falsos. En ese caso, los controladores de datos deben borrar o corregir los datos inexactos, erróneos o incompletos.

Cuando el controlador de datos envía una solicitud de “rectificación”, AppsFlyer elimina los datos anteriores del sujeto de datos hasta ese momento, pero actualiza los datos recibidos posteriormente.

Derecho al borrado

El derecho al borrado obliga a los controladores de datos a eliminar los datos personales en el plazo de un mes.

Los anunciantes pueden eliminar los datos recopilados de los sujetos de datos mediante una solicitud de "borrado".

GDPR_logo2.png

API de solicitudes GDPR de AppsFlyer

El cumplimiento normativo de los requisitos del GDPR que se describen en este documento se logra mediante la API de solicitudes GDPR de AppsFlyer (a partir del 25 de mayo de 2018; las solicitudes recibidas antes de esta fecha no se procesan):

  1. Solicitud GDPR: Procesar uno de los tipos de solicitudes mencionados anteriormente: "acceso", "portabilidad", "borrado" o "rectificación".
  2. Solicitud de estado: Consultar el estado actual de una solicitud GDPR.
  3. Solicitud de descubrimiento: Preguntar por la versión de la API compatible y el formato de datos.
  4. Cancelación: Cancelar una solicitud GDPR durante la fase pendiente.

Depende del controlador de datos implementar los cambios en la interfaz gráfica de usuario para que sus usuarios finales puedan presentar estas solicitudes. Tenga en cuenta que las solicitudes GDPR se envían de a un usuario por vez.

1. Solicitud GDPR

Flujo de solicitudes GDPR

Todos los tipos de solicitudes GDPR –"acceso", "portabilidad", "borrado" y "rectificación"– se basan un mismo flujo:

  1. El sujeto de datos (usuario final) presenta una solicitud.
  2. El controlador de datos (anunciante) genera la solicitud GDPR (ver a continuación) y la envía a AppsFlyer.
  3. El procesador de datos (AppsFlyer) recibe la solicitud y responde con "201 OK" para las solicitudes válidas.
  4. En las siguientes 48 horas, la solicitud se pone en cola en el estado pending (pendiente) y aún puede cancelarse.
  5. Posteriormente, el estado de la solicitud cambia a in_progress (en curso), y AppsFlyer envía un postback de "status change" (cambio de estado). La solicitud NO PUEDE cancelarse de aquí en adelante.
  6. a) AppsFlyer cumple con la solicitud durante los siguientes 28 días.
    En el caso de una solicitud de "borrado"/"rectificación", los datos del usuario final se eliminan.
    En el caso de una solicitud de "portabilidad"/"acceso", es posible acceder a los datos del usuario final desde el panel de control de AppsFlyer en la sección GDPR o mediante la API de solicitudes (ver a continuación).
    b) El estado de la solicitud cambia a completed (finalizada), y AppsFlyer envía un postback de "status change" (cambio de estado). 

Formato de solicitudes GDPR

Se puede presentar una API de solicitudes GDPR por medio de HTTP POST al punto de conexión 

https://hq1.appsflyer.com/gdpr/opengdpr_requests?api_token=[api token]

 Consejo

El token de la API es el mismo token de API que se utiliza para Pull API. Puede recuperarlo desde su panel de control en Acceso a la API.

Parámetros

Nombre de la propiedad Obligatoria/Opcional Descripción
subject_request_id OBLIGATORIA Secuencia UUID v4. Debe ser generada por el controlador al momento del envío de la solicitud al procesador. Luego puede utilizarse para controlar el estado de la solicitud, actualizarla o cancelarla.
subject_request_type OBLIGATORIA Valor de la secuencia que representa el tipo de solicitud GDPR.  Valores admitidos: "erasure" (borrado), "portability" (portabilidad), "access" (acceso) y "rectification" (rectificación).
subject_identities OBLIGATORIA Matriz de objetos de identidad que incluyen el tipo, el valor y el formato del ID del dispositivo (ver a continuación).  Cada solicitud puede tener solo un ID de dispositivo.
submitted_time OBLIGATORIA Secuencia de fecha RFC 3339 que representa el momento de la solicitud original enviada por el sujeto de datos. Tenga en cuenta que todas las marcas de tiempo se envían en UTC.
property_id OBLIGATORIA Secuencia que representa la aplicación móvil con la cual está relacionada esta solicitud; por ejemplo, com.example para Android, id123456789 para iOS
api_version OPCIONAL Secuencia de versión que representa la versión deseada de la API de solicitudes GDPR.
status_callback_urls OPCIONAL Matriz de puntos de conexión para que las devoluciones de llamadas de estado se envíen a los siguientes cambios de estado de solicitud. Tenga en cuenta que SOLO se admiten puntos de conexión https.

Una solicitud GDPR DEBE contener al menos un objeto de identidad para cumplir con la solicitud. 

  1. identity_type - REQUIRED string value representing the form of identity. The supported Identity Types by AppsFlyer are ios_advertising_id, android_advertising_id, fire_advertising_id and microsoft_advertising_id.
  2. identity_value: Valor de secuencia OBLIGATORIO que representa la identidad.
  3. identity_format - REQUIRED string value representing the encoding of the identity. Currently raw is the only supported Identity Format by AppsFlyer.

Ejemplo de solicitud de borrado GDPR

HTTP POST 
https://hq1.appsflyer.com/gdpr/opengdpr_requests?api_token={api token] 
HTTP/1.1Host: example.processo.com
Accept: application/json
Content-Type: application/json
{ 
  "subject_request_id":"a7551968-d5d6-44b2-9831-815ac9017798",
  "subject_request_type":"erasure",
  "submitted_time":"2018-10-02T15:00:00Z",
  "subject_identities":[ 
   { 
     "identity_type":"android_advertising_id",
     "identity_value":"a55684fd-j661-46df-9149-f7bfd652egge",
     "identity_format":"raw"
   }
  ],
  "api_version":"0.1",
  "property_id":"com.example",
  "status_callback_urls":[ 
   "https://examplecontroller.com/opengdpr_callbacks"
  ]
}
 

 

Ejemplo de código de solicitud de borrado GDPR

JavaPythonNode.jsC#
/* 
using the okhttp package install from maven
https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp
 */

import okhttp3.*;
import java.io.IOException;

public class GdprSendRequest {
  public static void main(String[] args){

    OkHttpClient client = new OkHttpClient();
    RequestBody body = RequestBody.create(null, "" +
    "{\r\n\"subject_request_id\": \"<SUBJECT_ID>\"," +
    "\r\n\"subject_request_type\": \"erasure\"," +
    "\r\n\"submitted_time\": \"2018-11-02T15:00:00Z\"," +
    "\r\n\"subject_identities\": [\r\n" +
    "{\r\n\"identity_type\": \"android_advertising_id\"," +
    "\r\n\"identity_value\": \"<ADVERTISING_ID>\"," +
    "\r\n\"identity_format\": \"raw\"\r\n}" +
     "\r\n]," +
     "\r\n\"property_id\": \"com.example.application\"}");

    Request request = new Request.Builder()
    .url("https://hq1.appsflyer.com/gdpr/opengdpr_requests?api_token=<API_TOKEN>")
    .post(body)
    .addHeader("Content-Type", "application/json")
     .addHeader("Accept", "application/json")
    .build();

    try {
      Response response = client.newCall(request).execute();
      System.out.println(response.code());
      System.out.println(response.body().string());
      System.exit(0);
    } catch (IOException e) {
      e.printStackTrace();
      System.exit(1);
    }
  }
}

2. Solicitud de estado

Cada solicitud GDPR que se presente puede consultarse posteriormente para saber su estado. Para esto, se debe especificar el subject_request_id. Existen cuatro tipos de estado admitidos:

  1. pending (Pendiente): Se recibió una solicitud correcta y en este momento se encuentra en la cola.
  2. in_progress (En curso): En este momento se está procesando una solicitud.
  3. completed (Finalizada): Se cumplió con una solicitud.
  4. canceled (Cancelada): Se canceló una solicitud.

Formato de solicitud de estado

Se puede presentar una solicitud de estado por medio de HTTP GET al punto de conexión

https://hq1.appsflyer.com/gdpr/opengdpr_requests/[subject_request_id]?api_token=[api token]

Ejemplo de respuesta de estado

HTTP/1.1 200 OK
Content-Type: application/json
X-OpenGDPR-Processor Domain: example processor.com
X-OpenGDPR-Signature:
kiGlog3PdQx+FQmB8wYwFC1fekbJG7Dm9WdqgmXc9uKkFRSM4uPzylLi7j083461xLZ+mUloo3tpsmyIZpt5eMfgo7ejXPh6lqB4ZgCnN6+1b6Q3NoNcn/+11UOrvmDj772wvg6uIAFzsSVSjMQxRs8LAmHqFO4cF2pbuoPuK2diHOixxLj6+t97q0nZM7u3wmgkwF9EHIo3C6G1SI04/odvyY/VdMZgj3H1fLnz+X5rc42/wU4974u3iBrKgUnv0fcB4YB+L6Q3GsMbmYzuAbe0HpVA17ud/bVoyQZAkrW2yoSy1x4Ts6XKba6pLifIHf446Bubsf5r7x1kg6Eo7B8zur666NyWOYrglkOzU4IYO8ifJFRZZXazOgk7ggn9obEd78GBc3kjKKZdwaCrLx7WV5y9TMDCf+2FILOJM/MwTUy1dLZiaFHhGdzld2AjbjK1CfVzyPssch0iQYYtbR49GhumvkYl11S4oDfu0c3t/xUCZWg0hoR3XL3B7NjcrlrQinB1KbyTNZccKR0F4Lk9fDgwTVkrAg152UqPyzXxpdzXjfkDkSEgAevXQwVJWBNf18bMIEgdH2usF/XauQoyrne7rcMIWBISPgtBPj3mhcrwscjGVsxqJva8KCVCKD/4Axmo9DISib5/7A6uczJxQG2Bcrdj++vQqK2succ=
{
 "controller_id":"example_controller_id",
 "expected_completion_time":"2018-11-01T15:00:01Z",
 "subject_request_id":"a7551968-d5d6-44b2-9831-815ac9017798",
 "request_status":"pending",
 "api_version":"0.1"
}

Postbacks de estado

Tal como se describiera anteriormente en la sección Flujo de solicitudes GDPR, cuando cambia el estado de una solicitud GDPR, de pending (pendiente) a in_progress (en curso) y a completed (finalizada), AppsFlyer envía un postback GDPR a los puntos de conexión de la solicitud, especificados con la propiedad status_callback_urls.

Ejemplo de postback de estado:

POST /opengdpr_callbacks HTTP/1.1
Host: examplecontroller.com
Content-Type: application/json
X-OpenGDPR-Processor Domain: appsflyer.com
X-OpenGDPR-Signature: kiGlog3PdQx+FQmB8wYwFC1fekbJG7Dm9WdqgmXc9uKkFRSM4uPzylLi7j083461xLZ+mUloo3tpsmyIZpt5eMfgo7ejXPh6lqB4ZgCnN6+1b6Q3NoNcn/+11UOrvmDj772wvg6uIAFzsSVSjMQxRs8LAmHqFO4cF2pbuoPuK2diHOixxLj6+t97q0nZM7u3wmgkwF9EHIo3C6G1SI04/odvyY/VdMZgj3H1fLnz+X5rc42/wU4974u3iBrKgUnv0fcB4YB+L6Q3GsMbmYzuAbe0HpVA17ud/bVoyQZAkrW2yoSy1x4Ts6XKba6pLifIHf446Bubsf5r7x1kg6Eo7B8zur666NyWOYrglkOzU4IYO8ifJFRZZXazOgk7ggn9obEd78GBc3kjKKZdwaCrLx7WV5y9TMDCf+2FILOJM/MwTUy1dLZiaFHhGdzld2AjbjK1CfVzyPssch0iQYYtbR49GhumvkYl11S4oDfu0c3t/xUCZWg0hoR3XL3B7NjcrlrQinB1KbyTNZccKR0F4Lk9fDgwTVkrAg152UqPyzXxpdzXjfkDkSEgAevXQwVJWBNf18bMIEgdH2usF/XauQoyrne7rcMIWBISPgtBPj3mhcrwscjGVsxqJva8KCVCKD/4Axmo9DISib5/7A6uczJxQG2Bcrdj++vQqK2succ=

{
"controller_id":"example controller id at the processor",
"expected_completion_time":"2018-11-01T15:00:01Z",
"status_callback_url":"https://examplecontroller.com/opengdpr_callbacks",
"Subject_request_id":"a7551968-d5d6-44b2-9831-815ac9017798",
"Request_status":"pending"
}

3. Solicitud de reporte

Una vez finalizada una solicitud de acceso o portabilidad, puede descargar el reporte por medio de HTTP GET al punto de conexión

https://hq1.appsflyer.com/gdpr/download/[REQUEST_ID]?api_token=[TOKEN]

El reporte generado estará disponible durante 7 días a partir de la finalización.

4. Solicitud de descubrimiento

Para conocer los formatos admitidos por AppsFlyer, se puede enviar una solicitud de descubrimiento por medio de HTTP GET al punto de conexión

https://hq1.appsflyer.com/gdpr/discovery?api_token=[api token]

Ejemplo de respuesta de descubrimiento

HTTP/1.1 200 OK
Content-Type: application/json
{
 "api_version": "0.1",
 "supported_identities": [
  {
   "identity_type": "android_advertising_id",
   "identity_format": "raw"
  },
 ],
 "supported_subject_request_types": [
  "erasure", "access", "portability", "rectification"
 ],
 "processor_certificate": "https://exampleprocessor.com/cert.pem"
}

5. Solicitud de cancelación

Es posible cancelar una solicitud GDPR, según su subject_request_id, pero solo durante la fase pending (pendiente). 

Para esto, se debe enviar un HTTP DELETE con el subject_request_id a

https://hq1.appsflyer.com/gdpr/opengdpr_requests/[subject_request_id]?api_token=[api token]

Respuesta de cancelación

Cuando se recibe una solicitud de cancelación GDPR, AppsFlyer devuelve una respuesta de HTTP con código de estado 202 y varios parámetros más. Para conocer más detalles, consulte el capítulo "Propiedades de respuestas de cancelación" del GDPR.

Una vez que se cancela la solicitud, AppsFlyer envía un postback con el estado cancelled (cancelada). 

6. API de prueba de solicitudes GDPR

Se trata de una API de prueba de AppsFlyer correspondiente a la API de solicitudes GDPR de AppsFlyer. 

¿Cómo Funciona?

La API de prueba funciona de la siguiente manera:

1. Una vez presentada una solicitud GDPR, inmediatamente se le asigna el estado "Pending" (pendiente). A los fines de la prueba, el estado cambia cada 30 segundos.

2. Si se insertó un punto de conexión para un postback de estado en la solicitud GDPR, se envía un primer postback inmediatamente después de la solicitud, y dos postbacks de estado más con intervalos de 30 segundos.

Punto de conexión de prueba de solicitud GDPR:

https://hq1.appsflyer.com/gdpr/stub?api_token=[api token]

Punto de conexión de prueba de solicitud de estado:

https://hq1.appsflyer.com/gdpr/stub/[request id]?api_token=[api token]

Punto de conexión de prueba de solicitud de descubrimiento:

https://hq1.appsflyer.com/gdpr/stub/discovery?api_token=[api token]

Punto de conexión de prueba de solicitud de cancelación:

https://hq1.appsflyer.com/gdpr/stub/[request id]?api_token=[api token]

 Notas

  • Se debe insertar un token de API válido con la solicitud.
  • En la propiedad "property_id", el ID de la aplicación debe corresponder al propietario de la cuenta (de acuerdo con el token de la API).

Registros de solicitudes

Solo los propietarios de cuentas pueden ver todas las solicitudes GDPR presentadas en el panel de control de registros.

En el caso de las solicitudes de acceso y portabilidad finalizadas, también es posible descargar el reporte desde este panel de control.

Para acceder al panel de control de registros:

1.  Acceda al panel de control principal y haga clic en su nombre de usuario.

2.  Haga clic en Registros, y se abrirá la siguiente ventana:

GDPR_Table.png

 

¿Fue útil este artículo?
Usuarios a los que les pareció útil: 2 de 4