Обратный вызов с запросом на удаление данных

В приложениях, которые обращаются к данным пользователей, у пользователя должна быть возможность подать запрос на удаление своих данных. Реализовать это требование в приложении можно двумя способами:

  • реализовать обратный вызов с запросом на удаление данных;
  • предоставить URL с четкими инструкциями по удалению данных пользователя с помощью стороннего сайта или инструмента (сторонний сайт можно указать в соответствующем разделе Политики конфиденциальности приложения).

Обратный вызов с запросом на удаление данных выполняется всегда, когда пользователь удаляет ваше приложение или отзывает доступ к своим данным, к которым есть доступ у приложения, например к адресу электронной почты, в настройках своего аккаунта Facebook.

При использовании этой функции в приложение поступает вызов POST с подписанным запросом, содержащим ID пользователя внутри приложения. Пример обработки и структуры запроса см. в следующем разделе.

Разработчик обязан подтвердить получение запроса, предоставив пользователю ссылку и номер подтверждения, по которым можно ознакомиться с понятным описанием статуса запроса и, если это необходимо, законного основания для отказа в удалении данных. В Facebook для этого предусмотрены все необходимые технические возможности. Законные основания зависят от юрисдикции, обозначенных разработчиком причин и толкования соответствующих правил Facebook в каждом отдельном случае.

Реализация функции обратного вызова

Чтобы иметь возможность анализировать запросы и отвечать на них, необходимо сначала реализовать в приложении функцию обратного вызова с запросом на удаление данных. Используйте для этого безопасный протокол HTTPS. Вызов следует указать в поле URL запроса на удаление данных ("Панель приложений" > "Настройки").

Обратный вызов с запросом на удаление данных должен:

  • Инициировать удаление всех данных о пользователе, полученных приложением с Facebook.
  • Возвращать ответ JSON с URL, по которому пользователь сможет проверить статус своего запроса на удаление, и буквенно-цифровой код подтверждения. Ответ JSON должен выглядеть так:
    { url: '<url>', confirmation_code: '<code>' }

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

Ниже приведен пример обратного вызова на PHP, однако можно использовать любой другой язык.

<?php
header('Content-Type: application/json');

$signed_request = $_POST['signed_request'];
$data = parse_signed_request($signed_request);
$user_id = $data['user_id'];

// Start data deletion

$status_url = 'https://www.<your_website>.com/deletion?id=abc123'; // URL to track the deletion
$confirmation_code = 'abc123'; // unique code for the deletion request

$data = array(
  'url' => $status_url,
  'confirmation_code' => $confirmation_code
);
echo json_encode($data);

function parse_signed_request($signed_request) {
  list($encoded_sig, $payload) = explode('.', $signed_request, 2);

  $secret = "appsecret"; // Use your app secret here

  // decode the data
  $sig = base64_url_decode($encoded_sig);
  $data = json_decode(base64_url_decode($payload), true);

  // confirm the signature
  $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
  if ($sig !== $expected_sig) {
    error_log('Bad Signed JSON signature!');
    return null;
  }

  return $data;
}

function base64_url_decode($input) {
  return base64_decode(strtr($input, '-_', '+/'));
}
?>

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

{
   "algorithm": "HMAC-SHA256",
   "expires": 1291840400,
   "issued_at": 1291836800,
   "user_id": "218471"
}

Подробнее о подписанных запросах читайте в статье Вход для игр на Facebook (раздел Подписанный запрос).

Тестирование обратного вызова

Чтобы протестировать обратный вызов, выполните следующие действия:

  1. Войдите в приложение с помощью входа через Facebook.
  2. Откройте вкладку настроек Приложения и сайты в своем профиле Facebook: https://www.facebook.com/settings?tab=applications
  3. Удалите приложение.
  4. Перейдите по ссылке Просмотреть удаленные приложения и сайты.
  5. Во всплывающем окне нажмите кнопку Просмотреть справа от приложения.
  6. В открывшемся окне нажмите Отправить запрос, чтобы запустить обратный вызов.