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’); のように呼び出しが可能です。

次ページでは、具体的なコントローラー側の実装サンプルをご紹介します。

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL