FaceBookの「Add Page Tab Dialog」でハマったのでメモ。


どうも、fujinyoです。
12月に入ってから、FaceBookアプリ(FBアプリ)に力を注いでいます。

僕が今作っているのは、「ページタブ」で動くFBアプリなので
FBアプリをユーザーのFaceBookページ(FBページ)にタブとして追加する必要がありました。

タブとして追加してもらうには

ユーザーのFBページにタブとしてFBアプリを追加してもらう方法は、12月10日に仕様が変更されました。
それについては、以下のページを参考にしました。

Facebookアプリページが削除、タブの導入方法が変更へ
http://fb-news.jp/facebook/facebook_tab.html

「Add Page Tab Dialog」ってのを表示してあげれば、ユーザーが選択してFBアプリをFBページへ追加してもらう事ができるわけです。

結果の取得方法がわからない

「Add Page Tab Dialog」を使うと確かに、任意のページにFBアプリをタブとして追加する事ができました。
しかし、ダイアログには。「ページタブを追加」と「キャンセル」の2つのボタンがあります。

そこで僕がハマったのが、ユーザーがどちらのボタンをクリックしたのかの結果が取得できない事でした。
「ページタブを追加」ボタンをクリックした場合は、URLの後ろに tabs_added[追加したFBページのID] = 1 というGETパラメータが追加されているのはわかりました。
FBアプリは、FBサイトのiframe内に表示されるのでiframe内から表示元(親)URLのGETパラメータを取得する方法がどうしてもわかりませんでした。(これ、できるのかな?)

かなり調べましたが、もともとの問題の斜め上の方向へ行ってるんじゃないかと思いFaceBookの知人である石田宏美さんへメッセージ。
すぐに解決策が飛んで来ました。ありがたい。

解決策

解決策としては、「Add Page Tab Dialog」を使わずに「API使えばプログラム内でできるよ」とのこと。

へ?

そんな事できるんですか!と思いましたが、落ち着いて考えて見ればそうですよね、プログラム内でできて当然ですよね。ははは・・・。
で、そのサンプルコードが以下です。(注)例外処理は省略してます。

require_once('facebook.php');

$facebook = new Facebook(array(
'appId' => あなたのアプリのID,
'secret' => あなたのアプリの秘訣,
'cookie' => true
));

まずは、APIを使う準備をします!

// 指定ページにタブを追加
$app_id = あなたのアプリのID;
$fb_page_id = タブを追加するFBページのID;
$page_access_token = タブを追加するFBページのアクセストークン;
$result = $facebook->api($fb_page_id.'/tabs', 'POST', array(
'app_id' => $app_id,
'access_token' => $page_access_token
));

// タブの名前の変更
$tab_name = 任意のタブ名;
$result = $facebook->api($fb_page_id.'/tabs/app_'.$app_id, 'POST', array(
'custom_name' => $tab_name,
'access_token' => $page_access_token
));

こんな感じで追加できます。
$page_access_tokenのアクセストークンについては、以下のコードで取得できます。

//管理しているFBページ情報を取得
$pagesData = $facebook->api('/me/accounts','GET');

$page_access_token = $pageData['data']['access_token'];

//FaceBookページを複数所有しているユーザーの場合は
//$page_access_token = $pageData['data'][0]['access_token'];
//とか、何番目を挟む必要があるかもです

これで、無事FBページにFBアプリを(Dialogを使わずにプログラムコードで)追加させる事ができました。
複数のFBページを所持しているユーザーがいる場合は、事前にFBページ情報を取得しておいて
セレクトボックスなんかで選択できるようにしてあげればいいですね。

では、また。

※記事内でなにか間違いがあればご連絡下さい。

[PR] 「結さん」があなたに代わって開発案件の依頼主を探します

  • 「既存のクライアントにギャラアップは言いにくい」
  • 「営業活動する時間がないし、苦手」
  • 「仕事が途切れたらどうしよう」

ITエンジニアのこんな悩みを「結さん」が解決してくれます
結さんへの無料会員登録後は提案メールを待つだけです!

関連記事