GDPR

Соблюдение требований GDPR

Общий регламент по защите данных (GDPR) — это  норма Европейского законодательства в отношении защиты и конфиденциальности персональных данных граждан Евросоюза. В нем установлено, что компании, которые используют персональные данные физических лиц, обязаны удовлетворять их запросы на доступ, перенос, исправление и удаление данных в срок до 1 месяца..

При мобильной атрибуции невозможно заранее определить, кто из пользователей является гражданином ЕС, поэтому GDPR применяется ко всем пользователям мобильных устройств, независимо от их гражданства.

Инициатива GDPR

Для управления запросами субъектов данных и решения связанных с этим проблем в соответствии с требованиями GDPR AppsFlyer совместно с компаниями mParticle, Amplitude и Braze запустил протокол OpenGDPR.

OpenGDPR — это унифицированная среда с открытым фреймворком, обеспечивающая сотрудничество между компаниями-разработчиками для обеспечения справедливого и прозрачного использования данных клиентов. Эта инициатива позволяет разработчикам без труда реализовывать меры по защите данных клиентов в разных системах при их обработке и хранении.

Подробнее об этой инициативе см.здесь.

Субъекты GDPR

Субъект данных Конечный пользователь мобильного приложения, собирающего персональные данные
Контролер данных Производитель рекламы, который определяет цели и средства обработки персональных данных
Обработчик данных AppsFlyer и его партнеры, которые обрабатывают персональные данные по поручению контролера данных

Требования GDPR

В GDPR изложены обязательные права субъекта данных, которые должен соблюдать производитель рекламы.

Права

Определение в GDPR

Как AppsFlyer помогает контролеру

Право доступа

  1. Субъекты данных имеют право требовать от контролера сведения о том, будут ли обрабатываться их данные, с какой целью и в течение какого срока.
  2. Если данные предоставляются третьим лицам (например, AppsFlyer), субъекты данных имеют право знать, кто эти третьи лица.
  3. Право получения сведений об обрабатываемых категориях данных.
  4. Сведения об использовании автоматических средств обработки, которые могут оказать существенное воздействие на данные.
При отправке запроса типа "доступ" контролеры получают копию обработанных персональных данных субъекта данных.

Право на переносимость данных

Все персональные данные должны предоставляться субъектам данных в структурированном, широко распространенном и машиночитаемом формате, например, в виде СSV-файла.

При отправке запроса типа "перенос" контролеры данных получают копию обработанных персональных данных субъекта данных

Право на исправление

Позволяет субъектам данных вносить исправления в свои данные в случае их неточности или недостоверности. По получении запроса контролеры данных обязаны удалить или исправить неточные или неполные данные.

Когда контролер данных отправляет запрос типа "исправление", AppsFlyer удаляет старые данные субъекта данных и заменяет их новыми

Право на удаление

Право на удаление означает, что контролеры обязаны удалить персональные данные в течение одного месяца.

Рекламодатели могут удалять собранные персональные данные субъектов данных по запросу на удаление.

GDPR_logo2.png

API AppsFlyer для запросов GDPR

AppsFlyer обеспечивает выполнение описанных выше требований с помощью API запросов GDPR (начиная с 25 мая 2018 г.; запросы, полученные до этой даты, не обрабатываются):

  1. Запрос GDPR — выполнение запроса одного из вышеперечисленных типов: "доступ", "переносимость", "удаление" или "исправление".
  2. Запрос состояния — получение информации о текущем состоянии запроса GDPR
  3. Запрос на обнаружение — получение информации о поддерживаемой версии API и формате данных
  4. Запрос на отмену — отмена запроса GDPR на этапе ожидания

Контролер данных обязан внести в графический интерфейс изменения, обеспечивающие конечным пользователям возможность отправлять такие запросы. Обратите внимание, что один пользователь не может отправлять несколько запросов GDPR одновременно.

1. Запрос GDPR

Процедура выполнения запросов GDPR

Процедура выполнения запросов GDPR всех типов (доступ, переносимость, удаление или исправление) одинакова:

  1. Субъект данных (конечный пользователь) отправляет запрос.
  2. Контролер данных (производитель рекламы) создает запрос GDPR (см. ниже) и оправляет его в AppsFlyer.
  3. Обработчик данных (AppsFlyer) получает запрос и, если запрос правильный, отправляет ответ "201 OK".
  4. Запрос помещается в очередь и в течение следующих 48 часов находится в состоянии pending (Ожидание) — на этом этапе его можно отменить.
  5. Затем состояние запроса изменяется на in_progress (Выполняется), и AppsFlyer отправляет постбэк "status change" (Изменение состояния). С этого момента отменить запрос уже НЕЛЬЗЯ.
  6. a) AppsFlyer выполняет запрос в течение следующих 28 дней.
    Если это запрос типа "удаление" или "исправление", то данные конечного пользователя удаляются.
    Если это запрос типа "переносимость" или "доступ", то предоставляется доступ к данным конечного пользователя, которые можно получить либо в разделе GDPR панели управления AppsFlyer, либо с помощью API запросов (см. ниже).
    b) Состояние запроса изменяется на completed (Выполнен), и AppsFlyer отправляет постбэк "status change" (Изменение состояния).

Формат запроса GDPR

В API GDPR для отправки запросов используется HTTP-команда POST в конечную точку 

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

со следующими свойствами:

Имя свойства Обязательное / Необязательное Описание
subject_request_id ОБЯЗАТЕЛЬНОЕ Строка UUID v4. Создается контролером при отправке запроса обработчику.
subject_request_type ОБЯЗАТЕЛЬНОЕ Строковый параметр, определяющий тип запроса GDPR. Допустимые значения: "erasure" (удаление), "portability" (переносимость), "access" (доступ) и "rectification" (исправление)
subject_identities ОБЯЗАТЕЛЬНОЕ Массив объектов-идентификаторов, содержащий тип, значение и формат идентификатора устройства (см. ниже). Каждый запрос может содержать только один идентификатор устройства.
submitted_time ОБЯЗАТЕЛЬНОЕ Строка даты в формате RFC 3339, определяющая время создания субъектом данных исходного запроса. Обратите внимание, что все временные метки передаются в формате UTC
property_id ОБЯЗАТЕЛЬНОЕ Строка, определяющая мобильное приложение, к которому относится этот запрос
api_version НЕОБЯЗАТЕЛЬНОЕ Строка версии, определяющая нужную версию API запросов GDPR
status_callback_urls НЕОБЯЗАТЕЛЬНОЕ Массив конечных точек для обратных вызовов c состоянием, которые передаются для изменения состояния запроса. Обратите внимание, что поддерживаются ТОЛЬКО конечные точки HTTPS.

Запрос GDPR ДОЛЖЕН содержать один или несколько объектов-идентификаторов, используемых для выполнения запроса.

  1. identity_type — ОБЯЗАТЕЛЬНОЕ строковое значение, определяющее форму идентификатора. В AppsFlyer допускаются такие типы идентификаторов: ios_advertising_id, android_advertising_id, fire_advertising_id и microsoft_advertising_id.
  2. identity_value — ОБЯЗАТЕЛЬНОЕ строковое значение, определяющее идентификатор.
  3. identity_format — ОБЯЗАТЕЛЬНОЕ строковое значение, определяющее кодировку идентификатора. В данное время AppsFlyer поддерживает для идентификаторов только формат raw.

Пример запроса 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"
   ]
}
 

2. Запрос статуса

Для каждого отправленного запроса GDPR можно позднее отправить запрос его состояния, указав параметр subject_request_id. Возможны четыре типа статусов:

  1. pending (Ожидание) — Получен правильный запрос, который в данное время находится в очереди
  2. in_progress (Выполняется) — Запрос в данное время находится в обработке
  3. completed (Выполнен) — Запрос выполнен
  4. cancelled (Отменен) — Запрос отменен

Формат запроса статуса

Для отправки запросов статуса используется HTTP-команда GET в следующую конечную точку:

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

Пример статуса ответа на запрос

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"
}

Постбэки статуса

Как описано выше в разделе Процедура выполнения запросов GDPR, при изменении состояния запроса GDPR с pending на in_progress и на completed AppsFlyer отправляет постбэк GDPR в запрашивающие конечные точки, которые указаны в свойстве status_callback_urls.

Пример постбэка статуса:

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"
}

3. Отчет по запросу

После выполнения запроса типа "доступ" или "перенос" можно с помощью HTTP-команды GET загрузить отчет в следующую конечную точку:

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

Сформированный отчет доступен в течение семи дней.

4. Запрос на обнаружение

Для получения сведений о форматах, которые поддерживает AppsFlyer, можно отправить запрос на обнаружение с помощью HTTP-команды GET в следующую конечную точку:

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

Пример ответа на запрос на обнаружение

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. Запрос на отмену

Запрос GDPR можно отменить, указав его параметр subject_request_id, однако это возможно только на этапе pending (ожидание).

Для этого отправьте HTTP-команду DELETE с параметром subject_request_id в конечную точку:

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

Ответ на запрос на отмену

При получении запроса на отмену AppsFlyer возвращает HTTP-ответ с кодом состояния 202 и ряд других параметров. Подробные сведения см. в спецификации OpenGDPR, пункт "Свойства ответа на запрос об отмене".

После отмены запроса AppsFlyer отправляет постбэк с состоянием "cancelled " (Отменен).

6. Тестовый API запросов GDPR

Этот API AppsFlyer представляет собой тестовый API запросов GDPR.

Схема работы

Тестовый API работает следующим образом:

1. Сразу после получения запрос GDPR переходит в состояние Pending (ожидание). Для целей тестирования состояние меняется каждые 30 секунд.

2. Если запрос GDPR содержит конечную точку для постбэка состояния, первый постбэк отправляется сразу же после получения запроса, а затем отправляются еще два постбэка состояния с интервалом в 30 секунд.

Конечная точка тестирования запросов GDPR:

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

Конечная точка тестирования запроса состояния:

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

Конечная точка тестирования запроса на обнаружение:

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

Конечная точка тестирования запроса на отмену:

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

Примечания

  • Запрос должен содержать действительный токен API.
  • Идентификатор приложения, указанный в свойстве property_id, должен принадлежать владельцу аккаунта (в соответствии с токеном API).

Журналы запросов

Все отправленные запросы GDPR можно просматривать в разделе журналов панели управления, однако эта возможность доступна только владельцам аккаунтов.

На этой панели управления можно также загрузить отчет о выполненных запросах типа "доступ" и "перенос".

Доступ к разделу журналов на даборде:

1. Откройте главную страницу на дашборде и нажмите на свое имя пользователя.

2. Выберите Logs (Журналы), после чего откроется показанное ниже окно:

GDPR_Table.png

Была ли эта статья полезной?
Пользователи, считающие этот материал полезным: 1 из 2