facebookページを作る際に、「いいね!」ボタンを押してくれたユーザにだけ表示内容を変えたい、というケースがあると思います。今までは、FBMLの
いろいろ探してみたところ、ヒントはここに書いてあった。
Signed Request
Introducing iframe Tabs for Pages
試行錯誤を続けていた過程でわかったことだけども、iframeを使ったfacebookアプリは、iframeの読み込み先ページにsigned_requestというパラメータを渡していて、この値はapp secretの値を使って復号化できるらしい。で、復号したデータはJSONになっていて、そのアプリにアクセスしたユーザについて、IDや、アプリを導入しているfacebookページを「いいね!」しているかどうかも取得できる、と。
signed_requestの復号化については、上述Signed Requestの説明ページにPHPのサンプルコードが書いてあるので、それをそのまま使ってもいいんだけど、facebook APIのPHP版SDKを使えばもっとシンプルに書ける。
以下のサンプルは、すでにiframeの参照先で、facebook提供のPHP版SDKが使える前提で。
<?php require 'facebook.php'; $facebook = new Facebook(array( 'appId' => 'xxxxxxxxxx', 'secret' => 'xxxxxxxxxx', 'cookie' => true, )); // signed_requestを復号化 $signed = $facebook->getSignedRequest(); if ($signed['page']['liked']) { echo 'このFacebookページは「いいね!」が押されてぃるょ!'; } else { echo 'このFacebookページは「いいね!」が押されてぃなぃょ...'; } exit();
「いいね!」の有無以外にも取得できる値があるので、うまく使えばわざわざGraph APIにアクセスしなくても済んじゃうこともあるかもね。つか、facebookのSDKについて解説してるページは結構多いけど、getSignedRequest()について触れられているページが全然なかった。みんなどうやって「いいね!」の振り分けを実装してるんだろう。