Facebook sdk, publicação offline no mural do usuário com access token

Introdução

Algum tempo já não é mais permitido publicação de links no feed de notícias do usuário usando o Access Token de Aplicativo. Portanto o procedimento descrito neste artigo já não funciona mais como deveria. Porem é possível aproveitar o ultimo script onde demonstra como publicar com o access token, porém ao invés de usar um token de aplicativo, use um access token de usuário. No Artigo Facebook API, Gerando tokens de acesso é possível entender como gerar o access token do usuário e utilizar neste último script. (A permissão que o usuário deve prover ao aplicativo é a publish_actions)

Neste artigo vamos aprender como realizar publicações no mural do usuário mesmo o usuário estando offline na sua aplicação do facebook. A publicação é feita no feed de notícias, ficando disponível para todos amigos.

Para que seja possível publicar no mural do usuário offline, vamos precisar dos seguintes procedimentos:

  • É necessário que o usuário tenha acessado sua aplicação em algum momento e ter fornecido a permissão de publicação chamada publish_stream.
  • Guardar o identificador do usuário do facebook em nosso banco de dados.
  • Gerar e armazenar o access token do nosso aplicativo.

Com posse desses dados, podemos seguir adiante no nosso script de publicação offline.

Primeiro, vamos a um exemplo simples de como obter o ID do usuário no facebook e solicitar a permissão publish_stream. Depois veremos como obter o access token do seu aplicativo e por final, um script que demonstra como fazer a publicação no mural do usuário com access token.

Solicitando permissão de publicação e obtendo o ID do facebook

Em um primeiro instante, o usuário precisa acessar nossa aplicação e fornecer a permissão publish_stream. Faça essa implementação em seu aplicativo de acordo com suas próprias regras. Segue abaixo um script simples que realiza as operações que necessitamos. Utilize-o adaptando de acordo com sua necessidade.

<?php
// incluir a lib fo facebook
require 'facebook-php-sdk-master/src/facebook.php';

// Cria a instancia da aplicacao, informando o appid e o secret
$facebook = new Facebook(array(
  'appId'  => 'APP_ID',
  'secret' => 'SECRET',
));

$user_id = $facebook->getUser();

if ($user_id) { // usuario logado
	// solicitar permissao
	try {
		$permissions = $facebook->api("/me/permissions");
		if(! (array_key_exists('publish_stream', $permissions['data'][0])
		)) {
			header("Location: " . $facebook->getLoginUrl(array("scope" => "publish_stream")));
		    	exit;
		}
        } catch (FacebookApiException $e) {
                error_log($e);
                $user = null;
        }
	//
	// $user_id e o id do usuario no facebook
	// salvar o ID do usuario em banco
	echo $user_id;

} else {
        // usuario nao logado, solicitar autenticacao
        $loginUrl = $facebook->getLoginUrl();
	header("Location: $loginUrl");
}

Mais detalhes de como solicitar permissões pelo aplicativo, acessar meu aritgo Facebook App: Requisitando permissões pela API do PHP

Obtendo o access token do seu aplicativo

Para que seja feita a publicação no mural do usuário com ele estando offline de seu aplicativo, é necessário termos em mão o access token do nosso aplicativo.

Para gerar o access token é simples, basta acessar a URL abaixo, substituindo os campos YOUR_APP_ID e YOUR_APP_SECRET pelos respectivos dados do seu aplicativo.

https://graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&client_secret=YOUR_APP_SECRET&grant_type=client_credentials

A resposta da URL acima, deverá retornar no seguinte formato:

access_token=YOUR_APP_ACCESS_TOKEN

Salve o access token do seu aplicativo em um lugar onde poderá recuperá-lo mais tarde. (Normalmente em um banco de dados).

Expiração do access token

O access token do seu applicativo é assinado e associado ao seu APP_ID e SECRET. Portanto, o access token do aplicativo não expira, a não ser caso você resetar o seu APP_ID e SECRET.

Caso o usuário tenha removido seu aplicativo da lista de Aplicativo Configurados, você também não conseguirá mais postar no mural dele. Portanto, seja prudente ao realizar as publicações. Avise o usuário sobre a sua intenção de publicação no momento que o usuário ingressar no seu aplicativo.

Aplicativo de publicação

Segue abaixo um script simples que realiza a publicação no mural do usuário, sem a necessidade dele estar online no seu aplicativo.

<?php
// incluir a lib fo facebook
require 'facebook-php-sdk-master/src/facebook.php';

// Cria a instancia da aplicacao, informando o appid e o secret
$facebook = new Facebook(array(
  'appId'  => 'APP_ID',
  'secret' => 'SECRET',
));

// dados para envio da publicacao
$feed_data = array(
	"message" => "Youtube",
	"name" => "Site do Youtube", 
	"link" => "http://www.youtube.com", // link da publiccao
	"caption" => "www.youtube.com",
	"access_token" => "YOUR_APP_ACCESS_TOKEN",
);

try {
	// publica foto na timeline
	$dados = $facebook->api("/ID_USUARIO/feed", "post", $feed_data);
	echo "Foto publicada com sucesso!";
} catch (Exception $e) {
	echo "<pre>";
	var_dump($e);
	echo "</pre>";
}

Lembre-se de substituir os seguintes parâmetros:

  • APP_ID: ID do seu aplicativo.
  • SECRET: SECRET do seu aplicativo.
  • YOUR_APP_ACCESS_TOKEN: access token do seu aplicativo.
  • ID_USUARIO: ID do usuário que deseja publicar no mural.

Para mais detalhes de como realizar publicações, verificar o artigo Facebook php sdk, postando mensagens no mural do usuário

Please follow and like us:

Comments

    • mm By pasquati

    • mm By pasquati

  1. By Rafael

  2. By Saulo

    • mm By Douglas V. Pasqua

      • By Saulo

        • mm By Douglas V. Pasqua

          • By Saulo

          • mm By Douglas V. Pasqua

    • mm By Douglas V. Pasqua

    • mm By Douglas V. Pasqua

  3. By Pablo

  4. By Pedro

  5. By Dam

    • mm By Douglas V. Pasqua

  6. By Lucas

  7. By Lucas

    • mm By Douglas V. Pasqua

  8. By Lucas

    • By Lucas

      • By Lucas

        • By Lucas

          • mm By Douglas V. Pasqua

  9. By Lucas

  10. By Lucas

    • mm By Douglas V. Pasqua

Follow

Get every new post on this blog delivered to your Inbox.

Join other followers: