CodeIgniterにFacebook SDKを組み込む
CodeIgniterにFacebook SDKを組み込む方法をご紹介します。
ここでご紹介する他にもいろいろなやり方があると思いますが、SDK組み込みの一例ということで備忘録的に記載しておきます。
まずは、PHP版のFacebook公式SDKをダウンロードします。
srcフォルダの中にあるfacebook.php、base_facebook.php、fb_ca_chain_bundle.crtの3ファイルを、CodeIgniterのlibrariesディレクトリにコピーします。
librariesディレクトリは、CodeIgniter2.x系ではapplication/libraries、CodeIgniter1.x系では、system/application/librariesです。
続いて、App IDやApp SecretなどFacebookアプリの設定情報を入れていきます。(Facebookアプリの登録方法はここでは割愛させていただきます。)
ここでは、それなりに柔軟な作りとするため、サイト全体共通で使用できるようにconfig.phpに、各コントローラ毎にも変更できるようにコントローラー毎の設定を記載します。
まず、config.phpです。
$config['fbauth'] = array( 'appId' => 'App IDの値', 'secret' => 'App Secretの値', 'canvas' => 0, 'fbconnect' => 1, 'scope' => '取得したい権限' );
のように設定しておきます。
これをコントローラー側で上書き可能なように呼び出しを行います。
コントローラー側にも変数を用意します。
以下、welcomeコントローラへの組み込み例です。
class Welcome extends CI_Controller { public $fbauth; public function __construct() { parent::__construct(); // configに書いた値の呼び出し // 個別に設定する場合は、ここで上書きが可能です $this->fbauth = $this->config->item('fbauth'); // 後述するfb_modelの呼び出し $this->load->model("fb_model","fb"); } // 以下、個別処理部分は後述 }
ここまで準備ができたら、SDKを使用するfb_modelの作成です。
modelsディレクトリに、以下の内容でfb_model.phpを作成しましょう。
class Fb_model extends CI_Model { function __construct() { parent::__construct(); $CI = get_instance(); // ------------------------------------------- // Facebook SDK呼び出し // ------------------------------------------- $this->load->library('facebook', $CI->fbauth); } // ------------------------------------------- // APIコール(Controllerからの直接コール用) // ------------------------------------------- function api($url = null, $method = null, $data = null, $fql = null){ if(is_null($url) && is_null($fql)){ return(false); } if(!is_null($url) && !is_null($data)){ $ret = $this->facebook->api($url,$method,$data); }elseif(!is_null($url) && !is_null($method)){ $ret = $this->facebook->api($url,$method); }elseif(!is_null($url)){ $ret = $this->facebook->api($url); }else{ $ret = $this->facebook->api(array('method'=>'fql.query','query'=>$fql)); } return($ret); } // ------------------------------------------- // ログインURL取得 // ------------------------------------------- function get_login_url($redirect = null){ $fbParm = array( 'canvas' => $this->fbauth['canvas'], 'fbconnect' => $this->fbauth['fbconnect'], 'scope' => $this->fbauth['scope'] ); if($redirect != null){ $fbParm['redirect_uri'] = $redirect; } $ret = $this->facebook->getLoginUrl($fbParm); if(empty($ret)){ $ret = false; } return($ret); } // ------------------------------------------- // ログアウトURL取得 // ------------------------------------------- function get_logout_url($redirect = null){ if($redirect != null){ $fbParm['next'] = $redirect; } $ret = $this->facebook->getLogoutUrl($fbParm); if(empty($ret)){ $ret = false; } return($ret); } // ------------------------------------------- // ユーザー情報取得 // ------------------------------------------- function get_user($person = 'me'){ $ret = $this->facebook->api('/'.$person); if(!empty($ret) && is_array($ret)){ $ret["token"] = $this->facebook->getAccessToken(); } return($ret); } // ------------------------------------------- // アクセストークン設定 // ------------------------------------------- function set_token($token){ $token = $this->facebook->setAccessToken($token); if(!empty($token)){ return(true); } else{ return(false); } } }
エラー処理等は入れていませんので、適宜入れてください。
コントローラーからは、$this->fb->api(‘/me’); のように呼び出しが可能です。
次ページでは、具体的なコントローラー側の実装サンプルをご紹介します。