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

Posted on março 26, 2013. Filed under: Facebook, PHP | Tags:, , , , , , |

Introdução

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

Make a Comment

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

4 Respostas to “Facebook sdk, publicação offline no mural do usuário com access token”

RSS Feed for Pasqua Tecnologia Comments RSS Feed

Muito bom este artigo, eu tinha visto o outro e vc me indicou esse que é realmente o que eu preciso.
So ficou uma dúvida:
o YOUR_APP_ACCESS_TOKEN é unico, ou seja, é o mesmo para postar em qualquer timeline de qualquer usuário (claro que tenha dado permissão anteriormente) ou seja é so eu criar uma constante num arquivo config.php por exemplo?

outro detalhe é ID_USUARIO é obtido com $facebook->getUser(), no qual eu preciso guardar este id de usuário num banco para postagens posteriores ???

Olá Daniel,

Sim, o YOUR_APP_ACCESS_TOKEN é único. Ele esta atrelado ao app e não ao usuário.
o ID_USUARIO é forma de identificar o usuário no facebook. Guarde o ID_USUARIO em um banco de dados para poder usá-lo posteriormente na postagem.

Boa sorte!

Parabéns pelos seus artigos cara.
Eu queria saber se eu posso obter o id de todos os usuários do meu aplicativo depois deles já estarem com o app instalado, ou só na hora que cada um instala e da permissão ?

Agradeço desde já.

Olá Lucas! obrigado.

Não existe uma forma direta de obter a lista de usuários que estão usando seu aplicativo. Você deve gerenciar sua própria base de usuários, armazenando o ID no momento em que ele instala o aplicativo.
Lembre-se que o usuário pode remover o seu app do profile dele. Você pode criar um script que verifica se o usuário que esta na sua base ainda esta usando o seu app, requisitando com acess_token:

/USER_ID/permissions?fields=installed

Uma dica: Através de FQL você pode saber todos amigos seus que estão usando o mesmo aplicativo: (somente seus amigos e não todos usuários)

SELECT uid, name FROM user WHERE uid IN(SELECT uid2 FROM friend WHERE uid1 = me()) AND is_app_user = 1

Boa sorte!


Where's The Comment Form?

Liked it here?
Why not try sites on the blogroll...

%d blogueiros gostam disto: