ウェブ、ショウジン

PHPの条件分岐でFacebookページにファンゲートを実装

2011-4-5
Category
Facebook

2012年1月30日追記
Signed_Requestパラメータを使ってFacebookページのタブページにファンゲートを実装
*↑こっちでも実装できます。(追記ここまで)

Facebookページを「いいね!」した訪問者と、していない訪問者に対して表示する内容を出し分けることを「ファンゲート」というらしいです。(昨日知りました)

この記事末尾にリンクを張っている超親切かつ分かりやすい説明を参考にして「ファンゲート」を実装してみます。

このファンゲートのお試し用にFacebookアプリを用意して、タブ名は「Welcome」とする。「いいね!」していない訪問者に対してデフォルトで表示されるのはこの「Welcome」タブにする、ことにします。

「いいね!」をしてくれると表示する特別写真(ぜんぜん特別でもないんだけど)を用意することにしました。いちおう。

まず、アプリの設定画面で「アプリの秘訣」というよくわからない項目の文字列を控えておきます。(アプリの秘訣は英語表示だとApp Secret)

つぎに

「いいね!」をしてくれた訪問者とそうでない訪問者に対して異なるコンテンツを表示するのに、以下の四つのファイルを用意します

signed_request.php

訪問者が「いいね!」してくれているか、そうじゃないかを判断するプログラム

index.php

signed_request.phpの結果を受けて、訪問者を振り分けるプログラム

fan.php

「いいね!」してくれた、してくれている訪問者に対してのみ表示するページ

not_fan.php

「いいね!」していない状態の訪問者に対して「いいね!」するよう促すページ

以上の四つのファイルを用意する。signed_request.phpとindex.phpに関しては以下の内容を。fan.phpとnot_fan.phpは、それぞれの目的に合った内容を用意します。

signed_request.php

<?php
function parse_signed_request($signed_request, $secret) {
 list($encoded_sig, $payload) = explode('.', $signed_request, 2);
 // decode the data
 $sig = base64_url_decode($encoded_sig);
 $data = json_decode(base64_url_decode($payload), true);
 if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
  error_log('Unknown algorithm. Expected HMAC-SHA256');
  return null;
 }
 // check sig
 $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, '-_', '+/'));
 }
?>

index.phpは訪問者がこのFacebookアプリにアクセスした際に最初に読み込まれるファイルで、このファイルがincludeしているsigned_request.phpの実行結果を受けて「いいね!」してくれた訪問者、そうではない訪問者に対して表示する内容を出力し分けます。

index.php

*コード内の「アプリの秘訣」は先に控えておいた文字列に置換します。

<?php
  include_once('signed_request.php');
  if ( isset($_POST['signed_request']) ) {
    $fb_data = parse_signed_request($_POST['signed_request'], 'アプリの秘訣');
    if( $fb_data['page']['liked'] ){
      include_once('fan.php');
    } else {
      include_once('not_fan.php');
    }
  }
?>

スクロールバーの非表示でもお世話になったこの親切な記事を参考どころか、まんまなぞりました。ありがとうございます。
JS+PHPでFacebookページをカスタマイズ!

Categories

Tag Cloud

AdMob Android Apache centos CodeIgniter EC-CUBE facebookアプリ facebookページ feed Firefox Flash google googleanalytics htaccess iPad iPhone JavaScript lamp mobile nginx ogp pear php plugin rollover rss sendmail setting smarty ssh Titanium Mobile Titanium Studio tutorial ubuntu vim VirtualBox vmware vps Windows WordPress xampp youtube さくらインターネット アクセス解析 カスタム投稿