ユーザーデータにアクセスするアプリは、ユーザーがデータ削除をリクエストできる方法を提供する必要があります。アプリがこの要件を満たすには、次の2つの方法のどちらかを行います。
アプリユーザーがアプリを削除したり、Facebookアカウントの[設定]で、アプリと共有されていたデータ(メールアドレスなど)へのアクセスを削除したりすると、必ずデータ削除コールバックが呼び出されます。
この機能により、投稿が生成され、アプリに署名付きリクエストが送信されます。この署名付きリクエストには、リクエストを行ったユーザーを識別するためのapp-scoped 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ゲーム用のログイン」の「署名付きリクエストを使用する」をご覧ください。
コールバックのテストは次の手順で行います。