Shaw's Home Page(本館)

自分の趣味について書き散らかす雑記ブログ。

facebookアプリをiframeで作成する時に、「いいね!」ユーザだけ表示内容を変える方法

facebookページを作る際に、「いいね!」ボタンを押してくれたユーザにだけ表示内容を変えたい、というケースがあると思います。今までは、FBMLのタグを使うことで比較的簡単に実現できた機能なんだけど、3月11日以降「static FBML」アプリを使って新しくページ作成が出来なくなる&FBMLを使ったアプリも新規作成できなくなる、ということで、iframeを使ったアプリで同じことを実現出来ないか調べてみた。

いろいろ探してみたところ、ヒントはここに書いてあった。

Signed Request
Introducing iframe Tabs for Pages

試行錯誤を続けていた過程でわかったことだけども、iframeを使ったfacebookアプリは、iframeの読み込み先ページにsigned_requestというパラメータを渡していて、この値はapp secretの値を使って復号化できるらしい。で、復号したデータはJSONになっていて、そのアプリにアクセスしたユーザについて、IDや、アプリを導入しているfacebookページを「いいね!」しているかどうかも取得できる、と。

signed_requestの復号化については、上述Signed Requestの説明ページにPHPのサンプルコードが書いてあるので、それをそのまま使ってもいいんだけど、facebook APIPHPSDKを使えばもっとシンプルに書ける。

以下のサンプルは、すでにiframeの参照先で、facebook提供のPHPSDKが使える前提で。

<?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にアクセスしなくても済んじゃうこともあるかもね。つか、facebookSDKについて解説してるページは結構多いけど、getSignedRequest()について触れられているページが全然なかった。みんなどうやって「いいね!」の振り分けを実装してるんだろう。