GDPR

  • Anunciantes
  • Agências
  • Redes de anúncios
  • Desenvolvedores

Conformidade com o GDPR

O Regulamento geral sobre a proteção de dados (GDPR) é um regulamento na lei da UE relacionado à proteção de dados e à privacidade para cidadãos da União Europeia. Ele declara que as marcas que controlam dados pessoais devem ser capazes de honrar, dentro de um mês, as solicitações de acesso, portabilidade, retificação e apagamento

Em relação à atribuição móvel, como é impossível saber com antecedência quais usuários são cidadãos europeus, o GDPR se aplica a todos os usuários móveis, europeus ou não.

A iniciativa do GDPR

Para abordar e gerenciar solicitações de pessoas em causa, conforme exigido pela conformidade com o GDPR, a AppsFlyer, junto com mParticle, Amplitude e Braze, iniciaram o protocolo OpenGDPR.

OpenGDPR é uma estrutura unificada e livre, que facilita a cooperação entre empresas de tecnologia para o uso justo e transparente de dados do cliente. Ela possibilita aos fornecedores tomar ações sobre a privacidade de dados com facilidade em vários sistemas para processar e armazenar dados do cliente.

Leia mais sobre a iniciativa aqui.

Entidades do GDPR

Pessoa em causa O usuário final do aplicativo móvel para o qual os dados estão sendo coletados
Controlador de dados O anunciante determina o propósito e os meios pelos quais os dados pessoais são processados.
Processador de dados A AppsFlyer e seus parceiros processam dados pessoais em nome do controlador de dados

Requisitos do GDPR

O GDPR detalha os direitos obrigatórios da pessoa em causa, os quais o anunciante deve cumprir.

Direitos

Definição do GDPR

Como a AppsFlyer ajuda o controlador

Direito de acesso

  1. Se solicitado, as pessoas em causa têm o direito de saber se, por que e por quanto tempo o controlador de dados processará seus dados.
  2. Se os dados forem compartilhados com terceiros (como a AppsFlyer), as pessoas em causa têm o direito de saber quem são esses terceiros.
  3. O direito de saber quais categorias de dados estão sendo processadas.
  4. Se houver processamento automatizado, isso tem um efeito significativo sobre eles.
Ao enviar uma solicitação de "acesso", os Controladores de dados recebem uma cópia dos dados pessoais processados das Pessoas em causa.

Direito à portabilidade de dados

A Pessoa em causa precisa receber todos seus dados pessoais em um formato estruturado, comumente usado e legível pela máquina – como um arquivo CSV.

Ao enviar uma solicitação de "portabilidade", o Controlador de dados recebe uma cópia dos dados pessoais processados das Pessoas em causa

Direito à retificação

Permite que as Pessoas em causa corrijam seus dados caso percebam que estão imprecisos ou inverídicos. Os Controladores de dados precisam, então, apagar ou corrigir dados imprecisos ou incompletos.

Quando o controlador de dados envia uma solicitação de "retificação", a AppsFlyer exclui os dados antigos da pessoa em causa e novos dados são atualizados

Direito ao apagamento

O direito ao apagamento força os controladores de dados a remover os dados pessoais em até um mês.

Os anunciantes podem excluir os dados coletados das pessoas em causa com uma solicitação de "apagamento".

GDPR_logo2.png

API de solicitações do GDPR da AppsFlyer

A AppsFlyer oferece suporte aos requisitos acima por meio da sua API de solicitações do GDPR (a partir de 25 de maio de 2018 – as solicitações recebidas antes dessa data não são tratadas):

  1. Solicitação do GDPR – executar um dos tipos de solicitação acima: "acesso", "portabilidade", "apagamento" ou "retificação".
  2. Solicitação de status – consultar o status atual de uma solicitação do GDPR
  3. Solicitação de descoberta – questionar a versão da API compatível e formato de dados
  4. Cancelamento – cancelar uma solicitação do GDPR durante sua fase pending

Cabe ao controlador de dados implementar alterações da GUI, para que seus usuários finais possam enviar essas solicitações. Observe que as solicitações do GDPR são um usuário por vez.

1. Solicitação do GDPR

Fluxo da solicitação do GDPR

Todos os tipos de solicitação do GDPR, "acesso", "portabilidade", "apagamento" e "retificação", possuem o mesmo fluxo comum:

  1. A Pessoa em causa (usuário final) envia uma solicitação.
  2. O Controlador de dados (anunciante) constrói a solicitação do GDPR (veja abaixo) e a envia para a AppsFlyer.
  3. O Processador de dados (AppsFlyer) recebe a solicitação e responde com "201 OK" para solicitações válidas.
  4. Nas próximas 48 horas a solicitação é colocada na fila com status pending e ainda pode ser cancelada.
  5. Depois disso, o status da solicitação é alterado para in_progress, e a AppsFlyer envia um postback "alteração de status". A solicitação NÃO pode ser cancelada a partir daí.
  6. a) A AppsFlyer atende a solicitação durante os próximos 28 dias.
    Em caso de "apagamento"/"retificação" – os dados do usuário final são excluídos.
    Em caso de "portabilidade"/"acesso" – os dados do usuário final podem ser acessados no painel da AppsFlyer na seção GDPR ou por meio da API de solicitação (veja abaixo).
    b) A solicitação altera o status para completed e a AppsFlyer envia um postback "alteração de status"

Formato da solicitação do GDPR

Uma API de solicitação do GDPR pode ser enviada por meio de HTTP POST ao seguinte endpoint – 

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

com as seguintes propriedades: 

Nome da propriedade Obrigatória/Opcional Descrição
subject_request_id OBRIGATÓRIA String UUID v4. Isso deve ser gerado pelo controlador no momento do envio da solicitação a um Processador.
subject_request_type OBRIGATÓRIA Valor de string que representa o tipo de solicitação do GDPR. Valores compatíveis: "apagamento", "portabilidade", "acesso" e "retificação"
subject_identities OBRIGATÓRIA Matriz de objetos de identidade que abrange o tipo, valor e formato do ID de dispositivo (veja abaixo).  Cada solicitação pode ter apenas um ID de dispositivo.
submitted_time OBRIGATÓRIA String de data RFC 3339 que representa a hora da solicitação original pela pessoa em causa. Observe que todos os timestamps são enviados em UTC
property_id OBRIGATÓRIA String que representa o aplicativo móvel para o qual essa solicitação está direcionada, p. ex., com.example para Android, id123456789 para iOS
api_version OPCIONAL String de versão que representa a versão desejada da API de solicitação do GDPR
status_callback_urls  OPCIONAL Matriz de endpoints para que callbacks de status sejam enviados para as seguintes alterações de status da solicitação. Observe que SOMENTE endpoints https são compatíveis.

Uma solicitação do GDPR DEVE conter um ou mais Objetos de identidade para cumprir a solicitação. 

  1. identity_type - valor de string OBRIGATÓRIO que representa o formato da identidade. Os tipos de identidade compatíveis na AppsFlyer são ios_advertising_id, android_advertising_id, fire_advertising_id e microsoft_advertising_id
  2. identity_value - valor de string OBRIGATÓRIO que representa a identidade.
  3. identity_format - valor de string OBRIGATÓRIO que representa a codificação da identidade. Atualmente, bruto é o único formato de identidade compatível com a AppsFlyer.   

Exemplo de solicitação de apagamento do 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"
   ]
}
 

 

Exemplo de código da solicitação de apagamento do GDPR

Java Python Node.js C#
/* 
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. Solicitação de status

Toda solicitação do GDPR enviada pode ter seu status consultado posteriormente, especificando o subject_request_id. Existem quatro tipos de status compatíveis:

  1. pending - uma solicitação correta foi recebida e está atualmente na fila
  2. in_progress - uma solicitação está sendo executada no momento
  3. completed - uma solicitação foi atendida
  4. cancelled - uma solicitação foi cancelada

Formato da solicitação de status

Uma solicitação de status pode ser enviada por meio de HTTP GET ao seguinte endpoint:

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

Exemplo da resposta de status

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 status

Conforme descrito no Fluxo da solicitação do GDPR acima, quando o status de uma solicitação do GDPR é alterado, de pending para in_progress para completed, a AppsFlyer envia um postback do GDPR aos endpoints solicitantes, especificados com a propriedade status_callback_urls.

Exemplo de postback de status:

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. Solicitação de relatório

Assim que uma Solicitação de acesso ou Solicitação de portabilidade for concluída, você pode fazer download do relatório por meio de HTTP GET para o seguinte endpoint:

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

O relatório gerado está disponível durante sete dias a partir do momento da conclusão.

4. Solicitação de descoberta

Para conhecer os formatos compatíveis com a AppsFlyer, uma solicitação de descoberta pode ser enviada por meio de HTTP GET ao seguinte endpoint:

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

Exemplo da resposta de descoberta

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. Solicitação de cancelamento

É possível cancelar uma solicitação do GDPR, com base em seu subject_request_id, mas somente durante a fase pending.

Para fazer isso envie um HTTP DELETE com subject_request_id para:

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

Resposta de cancelamento

Quando uma solicitação de cancelamento do GDPR é recebida, a AppsFlyer retorna uma resposta HTTP com código de status 202 e diversos outros parâmetros. Para obter mais detalhes verifique o capítulo "Propriedades da resposta de cancelamento" do GDPR.

Assim que o cancelamento da solicitação acontecer, a AppsFlyer envia um postback com o status cancelled

6. API de teste das solicitações do GDPR

Essa API da AppsFlyer é uma API de teste para a API de solicitações do GDPR. 

Como ela funciona?

Essa API de teste funciona da seguinte forma:

1. Assim que uma solicitação do GDPR for feita, a solicitação é colocada imediatamente no status "Pending". Para fins de teste, o status é alterado a cada 30 segundos.

2. Se um endpoint para um postback de status foi inserido na solicitação do GDPR, um primeiro postback é enviado logo após a solicitação e dois outros postbacks de status são enviados em intervalos de 30 segundos.

Endpoint de teste da solicitação do GDPR:

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

Endpoint de teste da solicitação de status:

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

Endpoint de teste da solicitação de descoberta:

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

Endpoint de teste da solicitação de cancelamento:

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

 Notas

  • Um token da API válido deve ser inserido com a solicitação.
  • Na propriedade "property_id", o ID do aplicativo deve pertencer ao proprietário da conta (de acordo com o token da API).

Registros de solicitações

Todas as solicitações do GDPR enviadas estão disponíveis para visualização no Painel de registros somente pelos proprietários da conta.

Para solicitações de acesso e portabilidade completas, também é possível fazer download do relatório a partir deste painel.

Para acessar o Painel de Registros:

1.  Acesse o painel principal e clique no seu nome de usuário.

2.  Clique em Registros e a seguinte janela abrirá:

GDPR_Table.png

 

Esse artigo foi útil?
Usuários que acharam isso útil: 1 de 2