Facebook SDK

Facebook SDK + Composer + CodeIgniter

Usar a Facebook SDK em aplicações web está cada vez mais comum, e nesse tutorial vou mostrar como utilizá-la junto com o CodeIgniter e fazendo a instalação dela através do Composer.

Preparando o ambiente

Para criar a aplicação com a versão mais recente do CodeIgniter, vamos utilizar o Composer, que fará todo o processo, desde a criação do diretório até o download dos arquivos do CodeIgniter.

Acesse o terminal para que possa executar a linha de comando abaixo, que irá criar o diretório facebook-sdk-codeigniter.

Lembre-se que voce deve criar o diretório da aplicação dentro do diretório web do seu servidor, ou então configurar o virtual host para que aponte para o diretório onde estão os arquivos da aplicação.

composer create-project bcit-ci/codeigniter facebook-sdk-codeigniter --prefer-dist

Instalando a Facebook SDK

Após o diretório da aplicação ter sido criado, abra o arquivo composer.json que foi criado na raiz do diretório da aplicação para que possa atualizá-lo e assim fazer a instalação da Facebook SDK.

O código acima está mais enxuto do que o código inicial do arquivo composer.json além de ter sofrido algumas atualizações.

Veja que na linha 14 foi alterada a versão do PHP, pois a Facebook SDK tem como pré-requisito o uso da versão 5.4 do PHP.

Na linha 15 estamos determinando mais uma dependência a ser verificada e instalada, que é a Facebook SDK, nesse caso a versão 5.

Após atualizar o arquivo conforme o exemplo acima, volte ao terminal, acesse o diretório da aplicação e execute o comando a seguir para poder atualizar as dependências definidas no arquivo composer.json.

composer update

Configurando a aplicação

Agora que a Facebook SDK já está instalada, você deve fazer algumas configurações na sua aplicação para que o funcionamento da Facebook SDK ocorra de maneira satisfatória.

Autoload

Como a aplicação está utilizando o Composer para gerenciar as dependências – que nesse caso só conta com a Facebook SDK – é preciso informar que o autoload do Composer deve ser executado.

Para que isso ocorra acesso o arquivo application/config/config.php e modifique a linha 139 para que fique conforme apresentado abaixo.

Essa alteração farácom que o arquivo de autoload do Composer, que se encontra dentro do diretório vendor localizado na raiz da aplicação, seja carregado, liberando assim o uso das dependências instaladas via Composer.

$config['composer_autoload'] = './vendor/autoload.php';

Sessions

A Facebook SDK faz uso de sessões, então é preciso carregar a library Session do CodeIgniter para não ocorrerem erros na execução da Facebook SDK.

Abra o arquivo application/config/autoload.php e defina na linha 61 o carregamento da library session para a aplicação.

 

$autoload['libraries'] = array('session'); 

URLs Amigáveis

Para que você possa utilizar as URLs amigáveis, verifique se o mod_rewrite do Apache está ativado no seu servidor local. Adicione na raiz do projeto um arquivo .htaccess para que as URLs amigáveis possa ser interpretadas pelo CodeIgniter.

Facebook App

Para utilizar os recursos da Facebook SDK você precisará de um app id e de um app secret que são obtidos após criar uma aplicação no Facebook for Developers. Acesse o site e crie sua aplicação antes de prosseguir com esse tutorial.

É importante ficar atento às informações na hora da criação da aplicação no Facebook for Developers, pois você terá que informar a URL onde está sendo utilizada a SDK, por exemplo http://localhost/facebook-sdk-codeigniter para que seja dada a permissão de uso da Graph API e oAuth da SDK.

Integrando a SDK com o CodeIgniter

Como a Facebook SDK foi instalada utilizando o Composer, você não precisa de nenhuma library adicional no diretório application/libraries para fazer a integração.

Na codificação que será criada a seguir você irá ver como obter o link de login e o access token, e também como utilizar a Graph API para obter informações do usuário, como ID, nome, email e imagem de perfil.

Abra o arquivo application/controllers/Welcome.php e apague a linha do método index que carrega a view padrão do CodeIgniter.

Em seguida, logo após a declaração da classe Welcome, você deve declarar uma variável de classe, que irá receber as informações estáticas para uso da SDK, como por exemplo o app id  e o app secret.

class Welcome extends CI_Controller {

private $fb;

}

Em seguida, crie um método chamado __construct para que sejam então definidas as informações estáticas.

public function __construct()
{
    parent::__construct();
    $this->fb = new Facebook\Facebook([
        'app_id' => 'numero_do_app_id',
        'app_secret' => 'string_do_app_secret',
        'default_graph_version' => 'v2.7',
        'persistent_data_handler'=>'session'
    ]);
}

app_id: é o código obtido no FAcebook for Developers após a criação do app

app_secret: é o código obtido no FAcebook for Developers após a criação do app

default_graph_version: é a versão da Graph API que deve ser utilizada

persistent_data_handler: é o tipo de persistência de dados que será utilizado pela SDK

No método index você irá colocar o código para obter o link de login e exibí-lo na tela, para que então seja solicitada ao usuário a permissão para acessar os seus dados e em seguida retornar para a aplicação, gerando o access token.

public function index()
{
    $helper = $this->fb->getRedirectLoginHelper();
    $permissions = ['email'];
    $loginUrl = $helper->getLoginUrl('link_para_onde_o_usuario_sera_redirecionado', $permissions);
    echo '<a href="' . htmlspecialchars($loginUrl) . '">Logar com Facebook!</a>';
}

A variável $permissions recebe um array com as permissões que precisam ser solicitadas ao usuário. Uma lista com essas permissões pode ser encontrada na documentação da SDK.

Em $helper->getLoginUrl(), o primeiro parâmetro deve ser a url pra onde o usuário será retornado após liberar as permissões via Facebook. Utilize a URL base da aplicação combinada com “/welcome/logado”, que é o próximo método que será criado dentro do controller Welcome.

public function logado()
{

    $helper = $this->fb->getRedirectLoginHelper();

    try {
        $accessToken = $helper->getAccessToken();
    } catch(Facebook\Exceptions\FacebookResponseException $e) {
        echo 'Erro da Graph API: ' . $e->getMessage();
        exit;
    } catch(Facebook\Exceptions\FacebookSDKException $e) {
        echo 'Erro da Facebook SDK: ' . $e->getMessage();
        exit;
    }

    if (isset($accessToken)) {
        $this->session->set_userdata('facebook_access_token', (string) $accessToken);
        try {
            $response = $this->fb->get('/me?fields=id,name,email,picture', $accessToken);
        } catch(Facebook\Exceptions\FacebookResponseException $e) {
            echo 'Erro da Graph API: ' . $e->getMessage();
            exit;
        } catch(Facebook\Exceptions\FacebookSDKException $e) {
            echo 'Erro da Facebook SDK: ' . $e->getMessage();
            exit;
        }
    } elseif ($helper->getError()) {
        echo "Requisição negada para o usuário.";
        exit;
    }else{
        echo "Erro desconhecido.";
        exit;
    }

    $user = $response->getGraphUser();

    foreach ($user as $key => $value) {
        echo $key.": ".$value."
";
    }

}

No método que acabou de ser criado, em caso de sucesso na obtenção do access token, será executado um foreach para que sejam recuperadas as informações de cada chave do array $user, que contém as informações do usuário.

Para obter as informações do usuário foi utilizado o método $this->fb->get() chamando a Graph API (/me?fields=id,name,email,picture), que retorna as informações do usuário q ue foram passadas como parâmetro.

A Graph API possui vários recursos, e sua documentação é bastante completa e pode ser acessada em https://developers.facebook.com/docs/graph-api/.

Viu como é fácil e rápido integrar a Facebook SDK com o CodeIgniter? Tudo o que você precisa agora é checar os recursos que você precisa implementar, buscar na documentação oficial da Facebook SDK as informações sobre o recurso e implementar no CodeIgniter.

Em caso de dúvidas, deixe-as nos comentários que responderemos o mais breve possível.

Bons estudos!