访问用户数据的应用必须为用户提供请求删除数据的方法。应用可以通过两种方法满足此项要求:
每当应用用户在 Facebook 帐户的“设置”中移除您的应用时,或移除当前与您应用所分享数据(如该用户的邮箱)的访问权时,系统就会调用数据删除回调。
系统会生成一个带有签名请求的 POST,并将其发送给您的应用。该签名请求包含一个应用范围编号,用于标识发出请求的用户。有关如何解析请求和已解析请求结构的示例,请查看以下部分。
响应用户请求时,您需要通过我们提供的技术手段来确认您已收到用户删除数据的请求,并提供链接和确认编号。用户必须能够通过此链接和确认编号查看有关其请求状态的说明,相关内容应简单易懂,若拒绝删除数据,则还应包括拒绝请求的合法理由(根据司法管辖区和我们对与其陈述原因相关政策的具体解读,对“合法”的界定会有所不同)。
如要解析和响应请求,您需要实现“数据删除请求”回调。您的回调必须使用安全的 HTTPS 协议,且必须列于应用面板“设置”的数据删除请求网址字段中。
您所实现的数据删除请求回调必须执行以下操作:
{ 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 游戏平台登录主题中的使用签名请求部分。
要测试回调,请执行以下操作: