[CodeIgniter2][Facebook PHP SDK 4] Integracja facebookowego sdk za pomocą composera.

Do działania swojej strony potrzebuję ścisłej współpracy z facebookiem, tak żeby użytkownicy nie musieli się u mnie rejestrować, a wystarczyło szybkie logowanie.

Po kilku godzinnych bojach udało mi się dojść do części działającego projektu. Oczywiście kilka kwestii jest do dociągnięcia i być może w swoim czasie doczekają się ulepszenia. Testowane na windows i xampp.




Pobieramy composera dla windowsa, instalujemy i tworzymy w folderze naszego projektu plik composer.json np. za pomocą notepada. Pamiętajmy że plik ma mieć rozszerzenie .json, a nie .txt.

Następnie wpisujemy/wklejamy tam takie coś:

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

Dzięki temu będziemy mogli pobrać i zainstalować nasze facebookowe SDK v4. Zapisujemy i instalujemy. Jak? poprzez konsole albo p.p.myszy na pliku composer.json i wybieramy composer install( o ile przy instalacji wybraliśmy opcję że będą się nam pokazywać opcje composera w oknie kontekstowym).

Czekamy aż biblioteka zostanie zainstalowana.

Teraz musimy utworzyć w naszej aplikacji w folderze /application/libraries/. Plik o nazwie Facebook.php, o poniższej treści:

<?php
if (!defined('BASEPATH'))    exit('No direct script access allowed');
if (session_status() == PHP_SESSION_NONE) {    session_start();}
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */
use Facebook\FacebookSession;use Facebook\FacebookRequest;use Facebook\GraphUser;use Facebook\FacebookRequestException;use Facebook\FacebookRedirectLoginHelper;
/** * Description of Facebook * * @author Radomiej */class Facebook {
    var $ci;    var $helper;    var $session;    var $permissions;
    public function __construct() {        $this->ci = & get_instance();        $this->permissions = $this->ci->config->item('permissions', 'facebook');
        // Initialize the SDK        FacebookSession::setDefaultApplication($this->ci->config->item('api_id', 'facebook'), $this->ci->config->item('app_secret', 'facebook'));
        // Create the login helper and replace REDIRECT_URI with your URL        // Use the same domain you set for the apps 'App Domains'        // e.g. $helper = new FacebookRedirectLoginHelper( 'http://mydomain.com/redirect' );        $this->helper = new FacebookRedirectLoginHelper($this->ci->config->item('redirect_url', 'facebook'));
        if ($this->ci->session->userdata('fb_token')) {            $this->session = new FacebookSession($this->ci->session->userdata('fb_token'));
            // Validate the access_token to make sure it's still valid            try {                if (!$this->session->validate()) {                    $this->session = null;                }            } catch (Exception $e) {                // Catch any exceptions                $this->session = null;            }        } else {            // No session exists            try {                $this->session = $this->helper->getSessionFromRedirect();            } catch (FacebookRequestException $ex) {                // When Facebook returns an error            } catch (Exception $ex) {                // When validation fails or other local issues            }        }
        if ($this->session) {            $this->ci->session->set_userdata('fb_token', $this->session->getToken());
            $this->session = new FacebookSession($this->session->getToken());        }    }
    /**     * Returns the login URL.     */    public function login_url() {        return $this->helper->getLoginUrl($this->permissions);    }
    /**     * Returns the current user's info as an array.     */    public function get_user() {        if ($this->session) {            /**             * Retrieve User’s Profile Information             */            // Graph API to request user data            $request = ( new FacebookRequest($this->session, 'GET', '/me'))->execute();
            // Get response as an array            $user = $request->getGraphObject()->asArray();
            return $user;        }        return false;    }
}



Teraz została nam jeszcze sprawa dodania pewnej linijki odpowiedzialnej za ładowanie plików/klas php z biblioteki facebooka.W głównej gałęzi projektu szukamy pliku index.php odpalającego nasz projekt. Przed uruchomienie core/CodeIgniter.php dopisujemy taką linijkę:

include_once './vendor/autoload.php';


Zostało jeszcze dodanie w folderze application/config pliku konfiguracyjnego. Nazwiemy go facebook.php i wpiszemy w nim to:

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
$config['facebook']['api_id'] = 'API_ID';$config['facebook']['app_secret'] = 'API_KEY';$config['facebook']['redirect_url'] = 'http://nasza.strona/login';$config['facebook']['permissions'] = array(  'email',  'user_location',  'user_birthday');


I to wszystko od teraz możemy korzystać z naszej facebookowej biblioteki w najnowszej wersji.


Jak czas pozwoli to zaktualizuje wersję Facebook.php o nowe funkcję. Jeśli ktoś byłby zainteresowany proszę o komentarz.