データ削除リクエストコールバック

ユーザーデータにアクセスするアプリは、ユーザーがデータ削除をリクエストできる方法を提供する必要があります。アプリがこの要件を満たすには、次の2つの方法のどちらかを行います。

  • データ削除リクエストコールバックを実装する。
  • 第三者のウェブサイトまたはツールを使用してユーザーデータを削除する方法を明示したURLをユーザーに提供する。第三者のウェブサイトは、アプリのプライバシーポリシーの該当セクションでもかまいません。

アプリユーザーがアプリを削除したり、Facebookアカウントの[設定]で、アプリと共有されていたデータ(メールアドレスなど)へのアクセスを削除したりすると、必ずデータ削除コールバックが呼び出されます。

この機能により、投稿が生成され、アプリに署名付きリクエストが送信されます。この署名付きリクエストには、リクエストを行ったユーザーを識別するためのapp-scoped IDが含まれています。リクエストの解析方法と解析済みリクエストの構造の例については、次のセクションをご覧ください。

ユーザーからのリクエストを受け取ったら、Facebookが提供する技術的な方法を使ってユーザーデータ削除リクエストの受理を行い、リンクと認証番号を送信します。このリンクと認証番号により、削除できない場合にはその正当な理由を含め、利用者が読み取れる形式で示したリクエストのステータスの説明にアクセスできるようにする必要があります(「正当な」理由の定義は司法管轄区域によって、また表明された理由付けにおいてFacebookのポリシーがケースバイケースでどのように解釈されるかによって異なります)。

コールバックの実装

リクエストを解析してこれに応答するには、「データ削除リクエスト」コールバックを実装する必要があります。コールバックは安全なHTTPSプロトコルを使用し、アプリダッシュボードの[設定]にある[データ削除リクエスト用URL]フィールドに表示されていなければなりません。

実装するデータ削除リクエストコールバックは、次の機能を備えている必要があります。

  • 利用者に関してアプリがFacebookから取得したあらゆるデータの削除を開始する。
  • リクエストへのレスポンスとして、ユーザーが削除リクエストのステータスを確認するためのURLと英数字の認証コードを含むJSONを返す。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. 表示されるウィンドウで、[リクエストを送信]をクリックしてコールバックを起動します。