Token de acesso FB de longa duração para que o servidor extraia informações da página FB

114

Estou ciente de que há muitas perguntas sobre os tokens de acesso do Facebook e a dor que eles causam, mas apesar de muita experimentação e da leitura de muitos artigos de blog frustrantemente vagos (FB e outros), ainda estou lutando para obter uma resposta clara para minhas necessidades . Deixe-me resumir meu processo até agora:

  • Estou criando um site que, do lado do servidor, precisa puxar as postagens / status de uma única página do Facebook
  • Eu sou um administrador dessa página do Facebook
  • Eu criei um aplicativo do Facebook
  • Usando o Facebook Graph API Explorer , gerei uma chave de curta duração, conectada ao meu aplicativo e à minha conta, que concede permissão à minha conta para visualizar os tokens de acesso para minhas páginas
  • Eu converti minha chave de curta duração em uma chave de longa duração (60 dias), cenário de ala 4 a partir deste

E é aqui que estou preso. Minha chave de 60 dias funciona bem para meu servidor puxar as informações necessárias da página, mas até onde eu posso dizer, não há como estender programaticamente essa chave de 60 dias. Também não conheço uma maneira de gerar uma nova chave de curta duração sem ir manualmente para o Facebook Graph API Explorer e criar uma.

Como é o meu servidor que faz as solicitações à API do Facebook e não um sistema baseado em usuário (onde eu poderia facilmente solicitar que um usuário autorizasse o aplicativo do Facebook novamente), isso cria um sistema muito desajeitado. Uma vez que o Facebook se tornou obsoleto offline_access, não há realmente nenhuma maneira permanente de meu servidor obter informações de minha própria página? Eu realmente terei que criar uma nova chave manualmente e atualizar manualmente meu servidor com ela a cada 60 dias?

Ou há algo que estou perdendo?

Atualizar:

O guia passo a passo que foi encontrado anteriormente aqui foi migrado para sua própria resposta .

redhotvengeance
fonte
Isso é incrível. Estou na mesma situação e estava procurando alguma informação sobre este assunto. É seguro que esse token não viole nenhuma política da plataforma FB? Só estou pedindo para ter certeza.
onigunn
2
A própria documentação do Facebook @asrijaal (dê uma olhada no Cenário 5) diz que esses tokens de acesso à página não expiram. Eu diria que é seguro presumir que eles cumprem as políticas do Facebook.
redhotvengeance
"Achei que seria bom deixar um processo claro passo a passo" - Deus me livre :) Obrigado @redhotvengeance
Steve McGill
Você cometeu um erro de digitação com o url do token de acesso à página. Devia ser um ? não contas a & depois. Passei um tempo tentando descobrir por que isso não estava funcionando. : P
Joren,
@Joren De fato - está consertado agora. Obrigado!
redhotvengeance de

Respostas:

188

Estas são as etapas que estavam anteriormente na pergunta - elas foram migradas para esta resposta.

Tendo descoberto que é possível gerar um Token de acesso à página do Facebook que não expira (com a ajuda de @Igy), aqui está uma saída clara, passo a passo para todos aqueles que procuram o mesmo:

  1. Certifique-se de que você é o administrador da página FB da qual deseja obter informações
  2. Crie um aplicativo FB (deve ser com a mesma conta de usuário que é o administrador da página)
  3. Vá para o Facebook Graph API Explorer
  4. No canto superior direito, selecione o aplicativo FB que você criou na lista suspensa "Aplicativo"
  5. Clique em "Obter Token de Acesso"
  6. Certifique-se de adicionar a manage_pagespermissão
  7. Converta este token de acesso de curta duração em um de longa duração fazendo esta chamada da API Graph: https://graph.facebook.com/oauth/access_token?client_id=<your FB App ID >&client_secret=<your FB App secret>&grant_type=fb_exchange_token&fb_exchange_token=<your short-lived access token>
  8. Pegue o novo token de acesso de longa duração devolvido
  9. Faça uma chamada de API Graph para ver suas contas usando o novo token de acesso de longa duração: https://graph.facebook.com/me/accounts?access_token=<your long-lived access token>
  10. Pegue o access_tokenpara a página da qual você obterá informações
  11. Lint o token para ver se ele está definido como Expires: Never!

Isso deve resolver. Agora você deve ter um token de acesso à página do Facebook que não expira, a menos que:

  • Você muda a senha da sua conta do Facebook
  • Você perde o acesso de administrador para a página de destino
  • Você exclui ou desautoriza seu aplicativo do Facebook

Qualquer um deles fará com que o token de acesso se torne inválido.

Se estiver recebendo (#100) Tried accessing nonexisting field (accounts) on node type (Page), vá para o Depurador de token de acesso , copie o valor de User IDe use-o para substituir a parte "eu" do URL na etapa 9.

redhotvengeance
fonte
2
Como e onde faço a etapa 6?
Stefan Müller
5
@ StefanMüller Quando você clica em "Obter token de acesso" na página do Graph API Explorer, uma caixa de diálogo "Selecionar permissões" é exibida. A manage_pagesopção está na Extended Permissionsguia.
redhotvengeance
2
Ótimo! Isso funciona perfeitamente e é publicado como PAGE, não como um usuário.
Benjamin Piette
3
Eu acredito que isso está desatualizado agora. e você só obtém um token de acesso que expira em cerca de dois meses.
Qaiser Wali
7
Eu fiz tudo isso agora e funciona, exceto que o id de token de longa duração expira após 2 meses e não é infinito. Além disso, o depurador de token de acesso tem um link na parte inferior do formulário para estender um token de acesso de curta duração para um token de acesso de longa duração.
SlimIT,
15

Isso é abordado no documento de suspensão de uso do Acesso offline

Use o token de 60 dias para o administrador da página recuperar um token de acesso à página (via /PAGE_ID?fields=access_tokenou /me/accounts) - o token de acesso à página não terá um tempo de expiração

Igy
fonte
5
Suspiro. Na verdade, este parece ser o bilhete. Eu poderia jurar que tentei todas as combinações possíveis dessas etapas - aparentemente, não acertei a que realmente funciona. Que conjunto absolutamente complicado de ações necessárias. Muito obrigado pela sua ajuda!
redhotvengeance
1
Tantas peças por toda a internet, esta é uma que realmente funciona.
Ernesto
Existe alguma maneira de obter esses 60 dias page_access_tokenpor código em javascript? Gosto da forma de obter user_access_token> FB.getAuthResponse()['accessToken'];Obrigado!
Tulon
3

Uma abordagem que funciona em 2019

Recentemente, estava tentando alcançar algo semelhante (ao caso de uso descrito neste tópico), mas queria ter certeza de respeitar as políticas atuais do Facebook, então fiz uma pequena pesquisa e aqui estou compartilhando o que descobri.

Meu caso de uso

Portanto, como eu já disse, meu caso de uso é muito semelhante ao descrito aqui; isso é:

  • Estou trabalhando para um distrito escolar.
  • Eles estão usando uma ferramenta de software para gerenciar praticamente tudo o que diz respeito ao transporte escolar.
  • Essa ferramenta permite que eles enviem notificações por e-mail (para assinantes) quando publicam alertas de atraso de ônibus e alertas de fechamento de escolas.
  • Muitas pessoas na comunidade seguem a organização em sua página do Facebook, e esse é o único lugar onde procuram por esses alertas.
  • Assim, um funcionário da organização deve publicar manualmente cada notificação na página do Facebook (além de criá-la no software de transporte). Além disso, essas notificações eventualmente expiram (ou são simplesmente excluídas antes de expirarem), de modo que o funcionário precisa voltar mais tarde para excluí-las manualmente também.
  • É uma perda de tempo, então o que estamos tentando fazer aqui é desenvolver um sistema simples que pesquisa periodicamente o banco de dados da ferramenta de software em busca de notificações novas (e expiradas) e atualizá-las (ou seja, adicionar e remover) na página do Facebook.

Este é, na minha opinião, um caso de uso legítimo, mas eu não tinha certeza de como implementá-lo de uma forma que esteja de acordo com as políticas do Facebook.

A resposta aceita

Segui os passos da resposta aceita e funcionou, exceto que as coisas parecem ter mudado: agora, mesmo que o token de página gerado não expire, access to dataexpira depois de cerca de 60 dias. Você também verá isso se seguir o procedimento e inspecionar o token de página na ferramenta FB Token Debugger .

Além disso, o fato de os tokens de página gerados estarem vinculados à conta do usuário também é lamentável, pois se o usuário atualizar sua senha, o token de página também será invalidado.

Como fazer em 2019

Depois de várias horas de pesquisa, me deparei com o seguinte artigo de documentação do Facebook: Business Login for Direct Businesses .

Acontece que agora é possível, seguindo as etapas descritas no artigo acima, gerar um token de página que não está associado a nenhuma conta de usuário do Facebook em particular e que não irá expirar (a menos que o aplicativo FB seja excluído ou o token de aplicativo subjacente é excluído, você sabe ...)

Então, aqui estão as etapas e as partes mais importantes:

  • Você precisa de uma conta de gerente de negócios .
    • A verificação será necessária e um contrato digital terá que ser assinado.
  • Você precisa adicionar a página de destino do Facebook a essa conta.
  • Você precisa criar um aplicativo do Facebook e também transferi-lo para a mesma conta do Business Manager.
  • O aplicativo terá que passar pelo processo de revisão do Facebook, pois as seguintes permissões serão necessárias: manage_pagese publish_pages.
    • Observação importante Para que as postagens feitas usando o token de geração de página sejam visíveis para usuários que não sejam administradores do aplicativo, esse aplicativo precisará ter sido publicado e aprovado.
    • Você ainda pode experimentar o conceito sem enviar para revisão, mas as postagens não serão visíveis publicamente.
  • Na conta do Business Manager (somente depois que seu aplicativo e página foram adicionados à conta), você precisa criar o que é chamado de usuário do sistema e dar a esse usuário função de administrador (ou permissões) para a página de destino do Facebook.
    • Um usuário do sistema pertence à conta do Business Manager e não está vinculado a um usuário específico. Meu entendimento atual é que um dos principais casos de uso para um usuário do sistema é o acesso programático à API Graph do Facebook (exatamente o que precisamos).
  • Então, para esse usuário do sistema, você precisa gerar um token de acesso (que nunca expirará). Você será solicitado a selecionar para qual aplicativo. Em seguida, você selecionará seu aplicativo de destino.
  • Em seguida, você precisará usar o token de aplicativo gerado para gerar um token de página, que também nunca expirará. O procedimento é descrito neste artigo como:
GET /<PAGE_ID>?fields=access_token&access_token=<SYSTEM_USER_ACCESS_TOKEN>
  • É isso aí.

Esse token nunca irá expirar e não estará vinculado a um usuário específico do Facebook, então é exatamente o que precisamos!

A última parte é garantir que seu aplicativo do Facebook seja aprovado pelo Facebook. Na verdade, é a parte mais importante, porque todo o procedimento é inútil se as pessoas não veem os nossos posts.

Eu queria ter certeza de que poderia confiar no procedimento acima para construir algo para meu cliente sem que o Facebook o rejeitasse no final, então, de antemão (ou seja, antes de começar a trabalhar no projeto do meu cliente), passei por todo o processo de criar uma página, um aplicativo, uma conta de gerente de negócios, etc. Eu verifiquei meu negócio. Enviei meu aplicativo para revisão. Em minha solicitação, fui muito específico sobre meu caso de uso e enfatizei que o aplicativo era para "uso próprio" (ou seja, que a organização está desenvolvendo um aplicativo para si mesma, não para outros usuários do Facebook). Fui aprovado em menos de 24 horas.

Algumas outras observações sobre o processo de revisão do aplicativo:

  • Tive que selecionar uma plataforma para o aplicativo, então selecionei o site .
  • Tive de indicar por que o aplicativo precisava das duas permissões e como as usaria.
  • Tive de indicar por que o revisor não conseguiu entrar no meu aplicativo e testá-lo (ou seja, porque o aplicativo será usado por um processo de trabalho).
  • Para os screencasts obrigatórios, simplesmente apresentei as operações manuais no terminal usando o curlutilitário (para gerar o token da página e fazer postagens na página do Facebook). Também mostrei como estava usando o Business Manager para vincular o usuário do sistema à página e gerar um token, e assim por diante.
  • Novamente, fui muito específico sobre meu caso de uso e acho que isso ajudou.

Espero que essas informações sejam úteis para pessoas com casos de uso semelhantes.

focorner
fonte
1

Muito obrigado a @redhotvengeance pelo guia passo a passo.

Depois de algum tempo, agora está claramente descrito na documentação do Facebook:

https://developers.facebook.com/docs/facebook-login/access-tokens/expiration-and-extension

Extensão de tokens de acesso à página

Os aplicativos podem recuperar um token de acesso à página dos usuários de administração da página quando eles se autenticam com a permissão manage_pages. Se o token de acesso do usuário usado para recuperar este token de acesso à página tiver vida curta, o token de acesso da página também terá vida curta.

Para obter um token de acesso à página de longa duração, troque o token de acesso do usuário por um de longa duração, como acima, e solicite o token de acesso à página. O token de acesso à página resultante não terá nenhum tempo de expiração.

Athlan
fonte
0

Você também pode copiar e colar do painel do aplicativo no Facebook. Os passos:

  1. Vá para https://developers.facebook.com

  2. Selecione seu aplicativo no canto superior direito da página (foto de sua aparência)

  3. Clique em Messenger nas opções à esquerda (irá para a configuração automaticamente) (foto de como é)
  4. Vá para a seção "Geração de token" na página. Selecione para qual página você deseja gerar o token. (foto de como é essa seção)
  5. Copie e cole seu token de página onde quer que você precise.

Lembre-se de que, embora em teoria seu token não expire, ele está diretamente vinculado a qualquer conta do Facebook em que você esteja conectado. Então, digamos que você altere sua senha ou remova as permissões entre sua conta e seu aplicativo, seu token não será mais válido.

Heidi
fonte