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’); のように呼び出しが可能です。
次ページでは、具体的なコントローラー側の実装サンプルをご紹介します。