こんちは。独自フレームワークtackphpでfacebookアプリをリリースしました。今回はfacebookアプリの作り方をご紹介いたします。
tackphpを使ってでのfacebookアプリの作り方ですが、普通に作る場合でも対応できる内容です。
なお作ったアプリは2chまとめブログのまとめアプリです。tackphpはこちらからダウンロード&インストールをお願いします。
1:PHP SDK
まずはPHP SDKをダウンロードしてください。
必要なファイルは、src/の中身、facebook.php,base_facebook.php,fb_ca_chain_bundle.crtの3ファイルです。
この3ファイルを、tackphp/sdk/に設置します。
2:Facebookのapp_id, secretの取得
facebookのアプリを作成しましょう。下記ページの「アプリ」タブからアプリを作成してください。
APP_IDとSECRETが払い出されますので、
tackphp/config.php内に、
define('FACEBOOK_APPID', 'xxxxxxxxxx');define('FACEBOOK_SECRET', 'xxxxxxxxxx');
定数を定義しておきましょう。
3:FacebookControllerの作成
tackphp/controller/FacebookController.phpを作成します。
<?phpclass FacebookController extends Controller{public function __construct(){parent::__construct();require_once '../sdk/facebook.php';$this->facebook = new Facebook(array('appId' => FACEBOOK_APPID,'secret' => FACEBOOK_SECRET,));//インストールされた場合のコールバックif(isset($_GET['code'])){$this->callback();}/*まだインストールしていない場合*/if(!$this->facebook->getUser()){$par = array('canvas' => 1,'fbconnect' => 0,'scope' => 'user_relationships,publish_stream,user_birthday',);$loginUrl = $this->facebook->getLoginUrl($par);echo "<script type='text/javascript'>top.location.href = '$loginUrl';</script>";exit();}}public function callback(){try{$userData = $this->facebook->api('/me');if(!$this->user->getUser($userData['id'])){$this->user->setUser($userData['id'],$userData['name'],$userData['gender'],$userData['birthday']);$params = array('message' => $userData['name'] . 'さんが' . SITE_TITLE . 'の利用を開始しました。','name' => SITE_TITLE,'link' => 'http://apps.facebook.com/' . FACEBOOK_APPID,'picture' => 'xxxxxxxxx.png','description' => 'texttexttexttesxttexttext',);$this->facebook->api('/me/feed', 'POST', $params);header('Location: http://apps.facebook.com/'. FACEBOOK_APPID);exit();}}catch(FacebookApiException $e){error_log($e->getResult());}}}
簡単に説明します。
facebook SDKのインスタンス化を行う際に、APPIDとSECRETを渡しています。
既にインストール済みの場合、facebook::getUser()メソッドをコールすることでuser_idが取得できます。インストールされていない場合は取得できないため、それをトリガーにしてインストール画面へリダイレクトさせます。リダイレクト先のURLは、facebook::getLoginUrl()をコールすることで取得できます。
重要なのがgetLoginUrlに渡す配列引数です。scopeというパラメータには、カンマ区切りで、ユーザーのパーミッションを設定します。ユーザーの友達の情報を取得したい場合は、user_relationships。ウォールへの書き込みはpublish_streamを指定します。ここが漏れていると、facebookSDKのAPIをコールしても思うように情報が引き出せません。気をつけてください。
パーミッションのパラメータ一覧はこちらにあります。http://developers.facebook.com/docs/reference/api/permissions/
ユーザーがインストールを実行したら、FacebookController::callback()をコールし、Facebook::apiでユーザープロフィールの取得、ウォールへの書き込みを実行しています。
以上。