Instalar facebook sdk en codeigniter

Por pispate

INSTALAR FACEBOOK SDK EN CODEIGNITER

Buenas, voy a intentar explicar de modo sencillo y sin entrar en opciones complejas cómo instalar la librería facebook sdk para php en codeigniter usando composer mediante la documentación actual en febrero de 2015. Además me centraré en el caso particular de instalarlo localmente (en la raiz de mi proyecto) porque ese era mi propósito.

La documentación la he sacado del sitio para desarrolladores de facebook y de la propia web de composer que es a donde nos dirige facebook. Las implementaciones en codeigniter las he sacado de este proyecto de github.

1er PASO: INSTALAR LA LIBRERÍA FACEBOOK SDK PARA PHP USANDO COMPOSER

Lo primero que hay que hacer es irse desde la consola al directorio donde tienes tu proyecto y ejecutar esto:


php -r "readfile('https://getcomposer.org/installer');" | php

Esto nos creará una archivo llamado composer.phar, y en ese mismo directorio, hay que crear un fichero llamado composer.json que contenga lo siguiente

{
"require" : {
"facebook/php-sdk-v4" : "4.0.*"
}
}

Una vez hecho esto, desde la consola, y en ese mismo directorio, ejecutamos el siguiente comando para instalar facebook sdk-v4 para php:

php composer.phar install

Esto nos creará alǵun que otro archivo en el raiz del proyecto, y una carpeta llamada "vendor" que contendrá el Facebook SDK para PHP v4. Con esto ya tenemos la libreria instalada y lista para usar. Ahora sólo nos queda saber implementarla y usarla en nuestro codeigniter.

2º PASO: IMPLEMENTACIÓN Y USO DE LA LIBRERIA FACEBOOK SDK PARA PHP EN CODEIGNITER:

Lo único que necesitamos es crear 3 archivos en las ubicaciones necesarias con el código que iré poniendo debajo:

En la carpeta del proyecto /application/config creamos un archivo llamado facebook.php con el siguiente código:

$config['facebook_app_id']          = 'xxxxxxxxxxxxxxxxxxx';
$config['facebook_api_secret']      = 'xxxxxxxxxxxxxxxxxxx';
$config['facebook_default_scope']   = 'email,user_friends';

Recuerda sustituir las 'x' con los datos de tu app de facebook y los permisos por los que tu quieras.

Dentro de la carpeta ../controllers crea un archivo login.php e introduce este código:

class Login extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->library(array('session', 'lib_login'));
    }
    /**
     * facebook login
     *
     * @return void
     * @author appleboy
     **/
    public function facebook()
    {
        $fb_data = $this->lib_login->facebook();
        // check login data
        if (isset($fb_data['me'])) {
            var_dump($fb_data);
        } else {
            echo 'Login';
        }
    }
}
/* End of file login.php */
/* Location: ./application/controllers/login.php */

Y por último, en la carpeta ../libraries crea un archivo llamado lib_login.php con el siguiente código:


/**
* Name: Facebook Login Library
*
* Author: appleboy
*
*/

require 'vendor/autoload.php';

use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;
use Facebook\FacebookRedirectLoginHelper;

class Lib_login
{
    /**
     * CodeIgniter global
     *
     * @var string
     **/
    protected $ci;

    /**
     * __construct
     *
     * @return void
     * @author Ben
     **/
    public function __construct()
    {
        $this->ci =& get_instance();
        $this->ci->load->library('session');
        $this->ci->config->load('facebook');

        if (! isset($_SESSION)) {
            session_start();
        }
    }

    public function facebook()
    {
        $facebook_default_scope = explode(',', $this->ci->config->item("facebook_default_scope"));
        $facebook_app_id = $this->ci->config->item("facebook_app_id");
        $facebook_api_secret = $this->ci->config->item("facebook_api_secret");

        // init app with app id and secret
        FacebookSession::setDefaultApplication($facebook_app_id, $facebook_api_secret);

        // login helper with redirect_uri
        $helper = new FacebookRedirectLoginHelper(site_url('login/facebook'));
        // see if a existing session exists
        if (isset($_SESSION) && isset($_SESSION['fb_token'])) {
            // create new session from saved access_token
            $datos_fb = new FacebookSession($_SESSION['fb_token']);

            // validate the access_token to make sure it's still valid
            try {
                if (!$datos_fb->validate()) {
                    $datos_fb = null;
                }
            } catch (Exception $e) {
                // catch any exceptions
                $datos_fb = null;
            }
        }

        if (!isset($datos_fb) || $datos_fb === null) {
            // no session exists

            try {
                $datos_fb = $helper->getSessionFromRedirect();
            } catch(FacebookRequestException $ex) {
                // When Facebook returns an error
                // handle this better in production code
                print_r($ex);
            } catch(Exception $ex) {
                // When validation fails or other local issues
                // handle this better in production code
                print_r($ex);
            }
        }

        // see if we have a session
        if (isset($datos_fb)) {
            // save the session
            $_SESSION['fb_token'] = $datos_fb->getToken();
            // create a session using saved token or the new one we generated at login
            $datos_fb = new FacebookSession($datos_fb->getToken());

            // graph api request for user data
            $request = new FacebookRequest($datos_fb, 'GET', '/me');
            $respuesta = $request->execute();
            // get response
            $graphObject = $respuesta->getGraphObject()->asArray();
            $fb_data = array(
                'me' => $graphObject,
                'loginUrl' => $helper->getLoginUrl($facebook_default_scope)
           );
            $this->ci->session->set_userdata('fb_data', $fb_data);

        } else {
            $fb_data = array(
                'me' => null,
                'loginUrl' => $helper->getLoginUrl($facebook_default_scope)
           );
            $this->ci->session->set_userdata('fb_data', $fb_data);
        }

        return $fb_data;
    }
}

Para más detalles acerca de la librería te sugiero que leas el artículo LIBRERIA FACEBOOK PARA CODEIGNITER.

Si con esto nos vamos a http://www.com/index.php/login/facebook (recuerda que en codeigniter esto es como ir dentro del controlador login.php al método facebook) observa en el navegador como aparece lo que en el controlador se pedía, que era concretamente esto:

// check login data
if (isset($fb_data['me'])) {
    var_dump($fb_data);
} else {
    echo 'Login';
}

Por supuesto, es un ejemplo muy sencillo para ver que la implementación funciona. Con lo cual, desde el controlador hacemos las peticiones a la libreria de facebook que queramos para mostrarlas posteriormente en la vista.

Y si lo que queréis es un ejemplo más claro con vistas incluidas lo podéis sacar de este otro proyecto github . Lo único que tenéis que hacer es adaptar vuestro controlador, y añadir la vista correspondiente.

Espero que os haya sido de gran utilidad. Gracias!

comentarios en facebook

1 comentarios

Carlos

Por Carlos el 17/04/2015 / #16

Un dato importante, The Facebook SDK for PHP v4 requires PHP 5.4 or greater. Me volví loco en Godaddy hasta que leí esto. Ahora les he pedido que me actualicen la versión del php que ya les vale!

1 comentarios
Escribe un comentario como anónimo

Si no quieres comentar como anónimo, puedes Entrar con tu cuenta

Introduce el código

Otros artículos

Siguenos en

Pincha en Me Gusta