Facebook, Configurando App como Page Tab

Posted on janeiro 19, 2013. Filed under: Facebook, PHP | Tags:, , |

Usando a aplicação como um Page Tab

Introdução

O Facebook permite que você insira uma aba de uma aplicação dentro de uma fan page. É uma opção ideal para você associar aplicativos promocionais dentro de sua fan page.

Antes é necessário que você já tenha uma aplicação do facebook criada. Para saber mais como criar aplicações para facebook, acesse o link, Criando aplicativos para Facebook usando SDK do PHP.

O próximo passo é configurar a seção chamada Page Tab dentro das configurações da sua App:

ScreenShot040

Principais campos:

  • Page Tab Name: Nome que será exibido na fan page para referenciar a app!
  • Page Tab URL: URL da sua app que será aberto quando o usuário clicar no link da aba na fan page!
  • Secure Page Tab URL: URL da sua app que será aberto quando o usuário clicar no link da aba na fan page (Usado para usuários que acessam o facebook por conexão segura https)!
  • Imagem da guia da página: Imagem da aba que será exibida na fan page!
  • Page Tab Width: Largura máxima da exibição da “aba” da sua app dentro da fan page. A sua app será aberta dentro de uma tag iframe na fan page. Portanto tenha cuidado para não exceder no layout da sua página o limite configurado nesse campo!

PS: (Lembre-se que para configurar um Page Tab é necessário configurar o endereço https (SSL), pois usuários do facebook que usam conexões seguras irão ser direcionados para o link https).

Associando o Pag Tab à uma Fan Page

Para associar a Pag Tab que configuramos anteriormente à uma Fan Page, acesse o endereço abaixo:

https://www.facebook.com/dialog/pagetab?app_id=YOUR_APP_ID&display=popup&next=YOUR_URL

Substiuíndo:

  • YOUR_APP_ID: Pelo App ID da sua aplicação !
  • YOUR_URL: A URL configurada na Page Tab de sua app!

Irá abrir uma página onde você poderá escolher em qual fan page deseja que a app seja incluída. Semelhante à essa:

ScreenShot032

Escolha a fan page desejada e clique no botão Adicionar aba da Página.

Finalizando

Visualizando a sua aba inserida na fan page:

ScreenShot041

Ao clicar no link, você será enviado para dentro da sua app. Ela será aberta em um iframe dentro da fan page.

ScreenShot042

PS: Veja que o botão curtir acima do iframe onde sua app foi aberta, é referente ao curtir da sua fan page e não da sua app.

É muito comum alguns aplicativos promocionais obrigarem os usuários à curtir a fan page antes de poder participar da promoção. Quando você clica no botão Curtir, o próprio mecanismo do facebook irá fazer um refresh na página de sua aplicação, facilitando o desenvolvimento dessa função.

Para saber mais como verificar se o usuário curtiu ou não sua fan page, acesse meu post Facebook, Verificando se usuário curtiu fan page !

Observações

  • Não é possível inserir mais de uma Page Tab à uma app. Portanto, para cada Page Tab que deseje incluir na sua fan page, você terá que criar uma nova aplicação.
Ler Post Completo | Make a Comment ( 13 so far )

Facebook app, publicando fotos na fanpage com access token.

Posted on outubro 21, 2012. Filed under: Facebook, PHP | Tags:, , , |

Introdução

ATENÇÂO: Atualização: Novo Artigo demonstra como publicar na fan page com access token:
Facebook sdk, Publicando fotos na Fan Page com access token.

ATENÇÂO: PARTE DESTE ARTIGO SE ENCONTRA OBSOLETO. A SEÇÂO Obtendo o access_token da Fanpage, método 2 NÂO FUNCIONA MAIS, DE ACORDO COM ALGUMAS MUDANÇAS REALIZADAS NO SITE DO FACEBOOK. PARTE DA SEÇÂO Postando fotos na fanpage SE TORNA INÙTIL POIS ELA DEPENDE DA SEÇÃO 2! Estou avaliando a questão para atualizar este artigo. Por enquanto, mais detalhes sobre a questão em: http://stackoverflow.com/questions/13808138/facebook-app-login-exchanging-code-for-an-oauth-access-token-is-working-only-o

Em artigo anterior, já vimos como postar fotos no mural do usuário e também na fanpage. Nos exemplos demonstrados, vimos como postar usando interação com o usuário. Ou seja, o usuário precisa acessar a aplicação para poder postar as imagens na fanpage. Neste artigo pretendo demonstrar como podemos automatizar o processo de publicação, sem que haja uma interação com o usuário, através de access token.

Neste artigo em especial, vamos trabalhar com access_token de páginas (fanpages). O primeiro passo é obter o access_token. Neste momento o usuário que administra a fanpage precisa fornecer as permissões necessárias para a publicação da app na fanpage. Após, podemos obter o access_token e utilizá-lo para publicações posteriores. Podemos continuar publicando na fanpage com o token, até que ele expire. Após a expiração do token, será necessário gerá-lo novamente e continuar o processo.

Vamos demonstrar abaixo dois método para obter o access_token da fanpage. Antes, veremos como obter algumas informações importantes:

  • appId e secret
  • São os identificadores da sua aplicação facebook. Para maiores informações de como criar aplicações, acesse: Criando aplicativos para Facebook usando SDK do PHP

  • id da fanpage
  • Código identificador da fanpage onde você irá realizar as postagens. Para obter o id da fanpage é bem simples:

    Na área administrativa de sua fanpage, clique no menu Editar Página -> Atualizar informações:

    Obtenha o ID da fanpage na URL do seu navegador:

Agora sim veremos os dois métodos distintos para obter o token da fanpage.

Obtendo o access_token da Fanpage, método 1

Segue abaixo o código com um dos métodos de obter o access token da fanpage.

De acordo com a documentação do facebook, o tempo de expiração do access token varia de acordo com vários fatores.(Ex: frequência de acesso à página, entre outros). Neste primeiro método, para obter o access token, é necessário que o usuário acesse a app abaixo manualmente. Sempre que o access token expirar, o usuário precisa executar a app novamente para obter o token atualizado.

Lembre-se que você deve usar as credenciais de usuário administrador da fanpage ao acessar a app abaixo.

<?php
require 'src/facebook.php';

// paraemtros
$fanpage_id = "402151349851571"; // id da fanpage
$appid = "xxxxxxxxxxxxxxx"; // id da app
$secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // secret

// Instancia da lib facebook
$facebook = new Facebook(array(
  'appId'  => $appid,
  'secret' => $secret,
));

// Obtem usuario logado
$user = $facebook->getUser();

if ($user) {

  try {
        // solicita permissoes
        $permissions = $facebook->api("/me/permissions");
        if(!(array_key_exists('publish_stream', $permissions['data'][0])
                 &&  array_key_exists('manage_pages', $permissions['data'][0]))) {
                header( "Location: " . $facebook->getLoginUrl(array("scope" => "publish_stream,manage_pages")) );
                exit;
        }

        // obtendo token
        $accounts = $facebook->api('/me/accounts', 'GET', $params);
        foreach($accounts['data'] as $account) {
                if( $account['id'] == $fanpage_id || $account['name'] == $fanpage_id ){
                        $fanpage_token = $account['access_token'];
                }
        }

        if(!$fanpage_token) {
                die("Seu usario nao tem permissao nesta fanpage");
        }

        echo "Fanpage Token: " . $fanpage_token; // guardar esse token

  } catch (FacebookApiException $e) {
        var_dump($e);
        $user = null;
  }
} else {
        // usuario nao logado, solicitar autenticacao
        $loginUrl = $facebook->getLoginUrl();
        echo "<a href=\"$loginUrl\">Facebook Login</a><br />";
        echo "<strong><em>Voc&ecirc; n&atilde;o esta conectado..</em></strong>";
}

A execução da app acima irá simplesmente exibir o access token na tela. Vamos utilizar esse token em uma segunda etapa.

Obtendo o access_token da Fanpage, método 2

Vamos agora demonstrar um script que obtém o token da fanpage de forma mais automatizada que no primeiro método. Dessa forma, podemos até rodá-lo através de um processo agendado no contrab, sem que haja necessidade de interação com o usuário administrador da fanpage para obter o token.

Primeiramente, vamos obter o valor do parâmetro code que representa um token retornado na etapa de autenticação e autorização, que não tem tempo de expiração. (PS: O code obtido será alterado somente caso você altere alguma das permissões que sua aplicação solicita).

Primeiramente,acesse o link abaixo:
https://www.facebook.com/dialog/oauth?client_id=CLIENT_ID&redirect_uri=RETURN_URL&scope=manage_pages,publish_stream
Substituindo:

CLIENT_ID -> ID da sua aplicação facebook.
RETURN_URL -> Endereço onde esta hospedada sua aplicação do facebook.

(Lembre-se de estar logado no facebook com o usuário administrador da fanpage ao acessar o link acima. Atente-se também para definir o valor do scope no link acima, de acordo com as permissões que sua aplicação precisa solicitar para o usuário. Caso sua app esteja publicando somente fotos na fanpage, as permissões manage_pages e publish_stream são suficientes).

Você será redirecionado para a URL informada RETURN_URL, com o campo code na barra de endereço. Salve o valor desse campo.

Com o campo code em mãos, vamos criar o script que obtem o access token da fanpage.

<?php
require 'src/facebook.php';

// parametros
$CLIENTE_ID = "xxxxxxxxxxxxxxx"; // id da app
$SECRET = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"; // secret da app
$CODE = "aaaaaaaaaaaaaa............"; // code de autorizacao
$FANPAGE_ID = "bbbbbbbbbbbbbbb"; // id da fanpage que deseja obter o token
$URL_APP = "http://www.seudominio.com.br"; // endereco onde sua app esta hospedada

// objeto facebok
$facebook = new Facebook(array(
        'appId'  => $CLIENTE_ID,
        'secret' => $SECRET,
));

// obter access token da conta
$url1 = "https://graph.facebook.com/oauth/access_token?client_id=$CLIENTE_ID&redirect_uri=$URL_APP&client_secret=$SECRET&code=$CODE";
$token = file_get_contents($url1);
$token = trim(str_replace("access_token=","",$token));


// obter todos access token que o usuario tem permissao
$url2 = "https://graph.facebook.com/me/accounts?access_token=$token";
$data = file_get_contents($url2);

// extrair o access token da fanpage desejada
$regex = '/access_token":"([^"]+)",("category":"[^"]+",)?"id":"' . $FANPAGE_ID . '"/';
preg_match($regex, $data, $match);
$fanpage_token = trim($match[1]);

echo "FanPage Token: $fanpage_token";

O script acima irá escrever o id da fanpage na tela. Você pode inserir esse script na crontab do Linux, usando o navegador lynx. Ex: lynx –dump http://www.seudominio.com.br/gera_token_fanpage.php. Você pode guardar esse token em um banco de dados e utilizá-lo em outro script que publica fotos na fanpage.

Em seguida vamos ver como postar fotos na fanpage usando o token.

Postando fotos na fanpage

Obtido o access token da fanpage, podemos criar um script que publica fotos na fanpage. Podendo ser inserido no crontab também
(lynx –dump http://www.seudominio.com.br/publica_fanpage.php):

<?php
require 'src/facebook.php';

// parametros
$CLIENTE_ID = "xxxxxxxxxxxxxxx"; // id da app
$SECRET = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"; // secret da app
$FANPAGE_TOKEN = "aaaaaaaaaa....."; // toke da fanpage
$FANPAGE_ID = "bbbbbbbbbbbbbbb"; //id da fanpage onde a imagem sera postada
$IMAGEM_UPLOAD = "imagem.png"; // local do arquivo de imagem do upload

// objeto do facebook
$facebook = new Facebook(array(
  'appId'  => $CLIENT_ID,
  'secret' => $SECRET,
));

// determina que sera realizado upload de arquivos
$facebook->setFileUploadSupport(true);

try {
        // parametros da postagem
        $post_data = array(
                "message" => "teste_" . time(),
                "image" => '@' . realpath($IMAGEM_UPLOAD),
                'access_token' => $FANPAGE_TOKEN,
        );

        // postando a imagem na fanpage
        $data['photo'] = $facebook->api("/$FANPAGE_ID/photos", 'post', $post_data);
        echo "publicado com sucesso";

} catch (FacebookApiException $e) {
        var_dump($e);
        $user = null;
}

Veja que no script acima, setamos alguns parâmetros fixos, como o id e token da fanpage. O token da fanpage foi obtido a partir de algum dos métodos que vimos na primeira etapa deste artigo. Podemos deixar esse mecanismo mais automático ainda, juntando algumas peças. Podemos ter no mesmo script, a parte que obtém o token e a parte que publica na fanpage juntos. Dessa forma, quando o token da fanpage expirar, não vamos precisar rodar o script que obtém o token da fanpage manualmente.
É uma etapa a menos para se preocupar.

<?php
require 'src/facebook.php';

// parametros
$CLIENTE_ID = "xxxxxxxxxxxxxxx"; // id da app
$SECRET = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"; // secret da app
$FANPAGE_ID = "bbbbbbbbbbbbbbb"; //id da fanpage onde a imagem sera postada
$CODE = "aaaaaaaaaaaaaaaaaaaaaaaaa............";
$IMAGEM_UPLOAD = "image.png"; // local do arquivo de imagem do upload
$URL_APP = "http://www.seudominio.com.br/"; // dominio onde sua appp esta hospedada

// objeto do facebook
$facebook = new Facebook(array(
  'appId'  => $CLIENT_ID,
  'secret' => $SECRET,
));

// obter access token da conta
$url1 = "https://graph.facebook.com/oauth/access_token?client_id=$CLIENTE_ID&redirect_uri=$URL_APP&client_secret=$SECRET&code=$CODE";
$token = file_get_contents($url1);
$token = trim(str_replace("access_token=","",$token));

// obter todos access token que o usuario tem permissao
$url2 = "https://graph.facebook.com/me/accounts?access_token=$token";
$data = file_get_contents($url2);

// extrair o access token da fanpage desejada
$regex = '/access_token":"([^"]+)",("category":"[^"]+",)?"id":"' . $FANPAGE_ID . '"/';
preg_match($regex, $data, $match);
$FANPAGE_TOKEN = trim($match[1]); // token da fanpage

// inicio da publicacao

// determina que sera realizado upload de arquivos
$facebook->setFileUploadSupport(true);

try {
        // parametros da postagem
        $post_data = array(
                "message" => "teste_" . time(),
                "image" => '@' . realpath($IMAGEM_UPLOAD),
                'access_token' => $FANPAGE_TOKEN,
        );

        // postando a imagem na fanpage
        $data['photo'] = $facebook->api("/$FANPAGE_ID/photos", 'post', $post_data);
        echo "publicado com sucesso";

} catch (FacebookApiException $e) {
        var_dump($e);
        $user = null;
}

Conclusão

A grande vantagem do método demonstrado neste artigo é a publicação automática de fotos na fanpage, podendo ser agendada em horários específicos (crontab), sem que haja necessidade de intervenção manual do operador.

Ler Post Completo | Make a Comment ( 10 so far )

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

%d blogueiros gostam disto: