В приложениях, которые обращаются к данным пользователей, у пользователя должна быть возможность подать запрос на удаление своих данных. Реализовать это требование в приложении можно двумя способами:
Обратный вызов с запросом на удаление данных выполняется всегда, когда пользователь удаляет ваше приложение или отзывает доступ к своим данным, к которым есть доступ у приложения, например к адресу электронной почты, в настройках своего аккаунта Facebook.
При использовании этой функции в приложение поступает вызов POST с подписанным запросом, содержащим ID пользователя внутри приложения. Пример обработки и структуры запроса см. в следующем разделе.
Разработчик обязан подтвердить получение запроса, предоставив пользователю ссылку и номер подтверждения, по которым можно ознакомиться с понятным описанием статуса запроса и, если это необходимо, законного основания для отказа в удалении данных. В Facebook для этого предусмотрены все необходимые технические возможности. Законные основания зависят от юрисдикции, обозначенных разработчиком причин и толкования соответствующих правил Facebook в каждом отдельном случае.
Чтобы иметь возможность анализировать запросы и отвечать на них, необходимо сначала реализовать в приложении функцию обратного вызова с запросом на удаление данных. Используйте для этого безопасный протокол HTTPS. Вызов следует указать в поле URL запроса на удаление данных ("Панель приложений" > "Настройки").
Обратный вызов с запросом на удаление данных должен:
{ 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 (раздел Подписанный запрос).
Чтобы протестировать обратный вызов, выполните следующие действия: