Facebook, Verificando se usuário curtiu fan page !
Introdução
Neste artigo vamos demonstrar como você pode verificar se o usuário que acessa sua aplicação no facebook curtiu ou não uma determinada fan page.
Verificando se o usuário curtiu a fan page
Informações necessárias para nosso script:
- Ter em mãos o APP_ID e o SECRET da app criada.
- ID da Fan Page que deseja verificar se o usuário curtiu ou não.
- Solicitar no mínimo a permissão user_likes, para podermos obter acesso ao likes realizados pelo usuário:
// verificar a necessidade de solicitar permissoes $permissions = $facebook->api("/me/permissions"); if(!array_key_exists('user_likes', $permissions['data'][0])) { header( "Location: " . $facebook->getLoginUrl(array("scope" => "user_likes")) ); exit; }
Para obter a informação se o usuário curtiu ou não a fan page, precisamos fazer uma consulta FQL (Facebook Query Language). FQL é uma maneira de solicitar dados de usuário usando um estilo de linguagem parecido com SQL.
// id do usuário logado $facebook_user_id = $facebook->getUser(); // verifica se usuário curtiu a fanpage $fql = "SELECT uid FROM page_fan WHERE page_id = '$FANPAGE_ID' AND uid = '$facebook_user_id'"; $isFan = $facebook->api(array( "method" => "fql.query", "query" => $fql, )); if($isFan) { echo "Usuário curtiu fanpage!"; } else { echo "Usuário não curtiu fanpage!"; }
Veja que devemos informar qual é o ID da Fan Page que deseja verificar e o ID do usuário que deseja checar. No caso, você pode colocar o id do usuário que esta logado na sua app.
Simples não ? Vamos agora colocar tudo junto em um único script:
<?php // biblioteca do facebook require 'src/facebook.php'; // ATENCAO, configurar os parametros abaixo $APP_ID = ""; // id da app $SECRET = ""; // secret da app $FANPAGE_ID = ""; // id da fanpage // objeto do facebook $facebook = new Facebook(array( 'appId' => $APP_ID, 'secret' => $SECRET, )); $facebook_user_id = $facebook->getUser(); if ($facebook_user_id) { try { // verificar a necessidade de solicitar permissoes $permissions = $facebook->api("/me/permissions"); if(!array_key_exists('user_likes', $permissions['data'][0])) { header( "Location: " . $facebook->getLoginUrl(array("scope" => "user_likes")) ); exit; } // verifica se usuario curtiu a fanpage $fql = "SELECT uid FROM page_fan WHERE page_id = '$FANPAGE_ID' AND uid = '$facebook_user_id'"; $isFan = $facebook->api(array( "method" => "fql.query", "query" => $fql, )); if($isFan) { echo "Usuario curtiu fanpage!"; } else { echo "Usuario nao curtiu fanpage!"; } } catch (FacebookApiException $e) { echo $e; $user = null; } } else { // usuario nao logado, solicitar autenticacao $loginUrl = $facebook->getLoginUrl(); header("Location: " . $loginUrl); exit; }
Usando Javascript
Essa função pode ser útil no SDK do facebook para outras linguagens. Destaco o SDK para javascript, que é muito utilizado.
Vejamos como implementar no javascript:
FB.api({ method: 'fql.query', query: 'SELECT uid FROM page_fan WHERE uid=' + user_id + ' AND page_id=' + fanpage_id }, function(resp) { if (resp.length) { alert('Usuario curtiu fanpage!') } else { alert('Usuario NAO curtiu fanpage!'); } } );
Colocando o código em um javascript funcional:
<html> <head> <title>Teste de Login Facebook</title> <script src="http://connect.facebook.net/en_US/all.js"></script> <script> // ATENCAO, configurar os parametros abaixo var app_id = ""; var fanpage_id = ""; FB.init({ appId : app_id, status: true, cookie: false, xfbml: false, oauth: true }); function usuarioCurtiuFanpage() { var user_id = (FB.getAuthResponse() || {}).userID if(!user_id) { return false; } FB.api({ method: 'fql.query', query: 'SELECT uid FROM page_fan WHERE uid=' + user_id + ' AND page_id=' + fanpage_id }, function(resp) { if (resp.length) { alert('Usuario curtiu fanpage!') } else { alert('Usuario nao curtiu fanpage!'); } } ); } function verificaCurtir() { FB.getLoginStatus(function(response) { if (response.status !== 'connected') { FB.login(function(response) { if (response.authResponse) { // pronto, usuario logado usuarioCurtiuFanpage(); } else { alert('Voce nao esta autorizado a usar essa app!'); } }, {scope: 'user_likes'}); } else { // pronto, usuario logado usuarioCurtiuFanpage(); } }); } </script> </head> <body> <a href="#" onClick="verificaCurtir();">Verificar fanpage</a> </body> </html>
Observações
- Existem outras formas de verificar se o usuário curtiu a fan page. Uma delas é caso você esteja usando a app através de um Page Tab. A informação do curtir a fan page pode ser obtida através do parâmetro signed_request. Caso queira aprender a trabalhar com os dados do signed_request, leia o artigo http://developers.facebook.com/docs/howtos/login/signed-request/
Boa sorte!!
ótima dica, obs: para quem precisa autenticar permissões no aplicativo deve trocar
header( “Location: ” . $facebook->getLoginUrl(array(“scope” => “user_likes”))
por
echo(” top.location.href='” . $facebook->getLoginUrl(array(“scope” => “user_likes”)) .”‘;”);
Israel Gonçalves
abril 19, 2013
Obrigado pela dica Israel!
pasquati
abril 19, 2013
Olá.. Estou tentando usar essa validação de quem curtiu a fan page,
mas infelizmente está funcionando só pra mim que sou criador do app…
Quando curto aparece o que eu quero porem quando outras pessoas usam e curtem aparece o que é pra ser exibido pra quem não curtiu! Ou seja uma imagem indicando pra curtir a fan page!
Pode me ajudar nisso??
Obrigado…
Douglas Barteles
junho 5, 2013