Token di accesso FB di lunga durata per il server per estrarre le informazioni della pagina FB


114

Sono consapevole del fatto che ci sono molte domande sui token di accesso di Facebook e sul dolore che causano, ma nonostante molti esperimenti e leggendo molti articoli del blog frustranti e vaghi (FB e non), sto ancora lottando per ottenere una risposta chiara alle mie esigenze . Consentitemi di analizzare sinteticamente il mio processo finora:

  • Sto creando un sito che, lato server, deve estrarre i post / stati da una singola pagina Facebook
  • Sono un amministratore di quella pagina Facebook
  • Ho creato un'app Facebook
  • Utilizzando Facebook Graph API Explorer , ho generato una chiave di breve durata, collegata alla mia app e al mio account, che concede l'autorizzazione al mio account per visualizzare i token di accesso per le mie pagine
  • Ho convertito la mia chiave di breve durata in una chiave di lunga durata (60 giorni) come lo scenario 4 da questo

Ed è qui che sono bloccato. La mia chiave di 60 giorni funziona bene per il mio server per estrarre le informazioni necessarie dalla pagina, ma per quanto ne so, non c'è modo di estendere a livello di codice quella chiave di 60 giorni. Inoltre, non conosco un modo per generare una nuova chiave di breve durata senza andare manualmente in Facebook Graph API Explorer e crearne uno.

Poiché è il mio server che effettua le richieste all'API di Facebook e non un sistema basato sull'utente (dove potrei facilmente richiedere che un utente autorizzi nuovamente l'app di Facebook), questo crea un sistema molto goffo. Da quando Facebook è stato deprecato offline_access, non esiste davvero un modo permanente per fare in modo che il mio server estragga informazioni dalla mia pagina? Dovrò davvero creare una nuova chiave a mano e aggiornarla manualmente con essa ogni 60 giorni?

O c'è qualcosa che mi manca?

Aggiornare:

La guida passo passo che è stata precedentemente trovata qui è stata migrata verso il basso nella sua risposta .


Questo e spettacolare. Mi trovo nella stessa situazione e stavo cercando alcune informazioni su questo argomento. È sicuro che questo token non infranga alcuna politica della piattaforma FB? Chiedo solo per essere sicuro.
onigunn

2
@asrijaal La documentazione di Facebook (dai un'occhiata allo Scenario 5) dice che questi token di accesso alla pagina non scadono. Direi che è lecito ritenere che rispettino le politiche di Facebook.
redhotvengeance

"Ho pensato che sarebbe stato bene lasciare un chiaro processo passo passo" - il cielo non voglia :) Grazie @redhotvengeance
Steve McGill

Hai un errore di battitura con l'URL del token di accesso alla pagina. Dovrebbe essere un? non un & dopo account. Ho passato un po 'a cercare di capire perché non funzionava. : P
Joren

@Joren Indeed - ora è stato risolto. Grazie!
redhotvengeance

Risposte:


188

Questi sono i passaggi che erano precedentemente nella domanda: sono stati migrati a questa risposta.

Avendo scoperto che è possibile generare un token di accesso alla pagina Facebook che non scade (con l'aiuto di @Igy), ecco una chiara guida passo passo per tutti coloro che cercano lo stesso:

  1. Assicurati di essere l'amministratore della pagina FB da cui desideri estrarre le informazioni
  2. Crea un'app FB (dovrebbe essere con lo stesso account utente dell'amministratore della pagina)
  3. Vai a Facebook Graph API Explorer
  4. In alto a destra, seleziona l'app FB che hai creato dall'elenco a discesa "Applicazione"
  5. Fai clic su "Ottieni token di accesso"
  6. Assicurati di aggiungere l' manage_pagesautorizzazione
  7. Converti questo token di accesso di breve durata in uno di lunga durata effettuando questa chiamata all'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. Prendi il nuovo token di accesso di lunga durata restituito
  9. Effettua una chiamata all'API Graph per vedere i tuoi account utilizzando il nuovo token di accesso di lunga durata: https://graph.facebook.com/me/accounts?access_token=<your long-lived access token>
  10. Prendi il access_tokenper la pagina da cui trarrai informazioni
  11. Filtra il token per vedere che è impostato su Expires: Never!

Dovrebbe bastare. Ora dovresti avere un token di accesso alla pagina Facebook che non scade, a meno che:

  • Cambia la password del tuo account Facebook
  • Perdi l'accesso come amministratore per la pagina di destinazione
  • Elimini o revochi l'autorizzazione della tua app Facebook

Ognuno di questi renderà il token di accesso non valido.

Se stai ricevendo (#100) Tried accessing nonexisting field (accounts) on node type (Page), vai al debugger del token di accesso , copia il valore di User IDe usalo per sostituire la parte "me" dell'URL nel passaggio 9.


2
Come e dove devo eseguire il passaggio 6?
Stefan Müller

5
@ StefanMüller Quando fai clic su "Ottieni token di accesso" nella pagina Esplora API del grafico, viene visualizzata una finestra di dialogo "Seleziona autorizzazioni". L' manage_pagesopzione è nella Extended Permissionsscheda.
redhotvengeance

2
Grande! Funziona a meraviglia, e questo viene pubblicato come PAGINA, non come utente.
Benjamin Piette

3
Credo che questo sia obsoleto ora. e ottieni solo un token di accesso che scade tra circa due mesi.
Qaiser Wali

7
Ho fatto tutto questo ora e funziona, tranne per il fatto che l'id del token di lunga durata scade dopo 2 mesi e non è infinito. Anche il debugger del token di accesso ha un collegamento nella parte inferiore del modulo per estendere un token di accesso di breve durata a un token di accesso di lunga durata.
SlimIT

15

Questo argomento è trattato nel documento sulla deprecazione dell'accesso offline

Utilizza il token di 60 giorni per l'amministratore della pagina per recuperare un token di accesso alla pagina (tramite /PAGE_ID?fields=access_tokeno /me/accounts): il token di accesso alla pagina non avrà una scadenza


5
Sospiro. In effetti, questo sembra essere il biglietto. Avrei giurato di aver provato ogni possibile combinazione di questi passaggi - a quanto pare mi sono perso quello che funziona davvero. Che insieme assolutamente contorto di azioni richieste. Grazie mille per il tuo aiuto!
redhotvengeance

1
Così tanti pezzi su Internet, questo funziona davvero.
Ernesto

Esiste un modo per ottenere questi 60 giorni page_access_tokentramite codice in javascript? Come il modo di ottenere user_access_token> FB.getAuthResponse()['accessToken'];Grazie!
Tulon il

3

Un approccio che funziona nel 2019

Recentemente stavo cercando di ottenere qualcosa di simile (al caso d'uso descritto in questo thread), ma volevo assicurarmi di rispettare le attuali politiche di Facebook, quindi ho fatto una piccola ricerca e qui sto condividendo ciò che ho trovato.

Il mio caso d'uso

Quindi, come ho già detto, il mio caso d'uso è molto simile a quello qui descritto; questo è:

  • Sto facendo dei lavori per un distretto scolastico.
  • Utilizzano uno strumento software per gestire praticamente tutto ciò che riguarda il trasporto scolastico.
  • Questo strumento consente loro di inviare notifiche e-mail (agli abbonati) quando pubblicano avvisi di ritardo dell'autobus e avvisi di chiusura della scuola.
  • Molte persone nella comunità seguono l'organizzazione sulla loro pagina Facebook, ed è l'unico posto in cui cercano quegli avvisi.
  • Quindi un dipendente dell'organizzazione deve pubblicare manualmente ogni notifica sulla pagina Facebook (oltre a crearla nel software di trasporto). Inoltre, tali notifiche alla fine scadono (o vengono semplicemente eliminate prima della scadenza), quindi il dipendente deve tornare indietro in un secondo momento per eliminarle manualmente.
  • È una perdita di tempo, quindi quello che stiamo cercando di fare qui è sviluppare un sistema semplice che interroghi periodicamente il database dello strumento software per nuove (e scadute) notifiche e aggiornale (cioè aggiungi e rimuovi) sulla pagina Facebook.

Questo è, a mio avviso, un caso d'uso legittimo, ma non ero sicuro di come implementarlo in un modo in linea con le politiche di Facebook.

La risposta accettata

Ho seguito i passaggi della risposta accettata e ha funzionato, tranne per il fatto che le cose sembrano essere cambiate: ora, anche se il token della pagina generato non scade, access to datascade dopo circa 60 giorni. Lo vedrai anche se segui la procedura e ispeziona il token della pagina nello strumento di debug dei token FB .

Inoltre, il fatto che i token della pagina generati siano legati all'account utente è anche un peccato, perché se l'utente aggiorna la sua password, anche il token della pagina viene invalidato.

Come farlo nel 2019

Dopo diverse ore di ricerca, mi sono imbattuto nel seguente articolo della documentazione di Facebook: Accesso aziendale per aziende dirette .

Risulta che ora è possibile, seguendo i passaggi descritti nell'articolo precedente, generare un token di pagina che non è associato a nessun particolare account utente Facebook e che non scadrà (a meno che l'app FB non venga cancellata o il token dell'applicazione sottostante viene cancellato, sai ...)

Quindi ecco i passaggi e le parti più importanti:

  • Hai bisogno di un account Business Manager .
    • Sarà richiesta la verifica e dovrà essere firmato un contratto digitale.
  • Devi aggiungere la pagina Facebook di destinazione a quell'account.
  • È necessario creare un'app Facebook e trasferire anche quell'app allo stesso account Business Manager.
  • L'app dovrà passare attraverso il processo di revisione di Facebook, perché saranno necessarie le seguenti autorizzazioni: manage_pagese publish_pages.
    • Nota importante Affinché i post creati utilizzando il token di generazione della pagina siano visibili agli utenti diversi dagli amministratori dell'applicazione, tale app dovrà essere stata pubblicata e approvata.
    • Puoi ancora sperimentare il concetto senza sottoporlo a revisione, ma i post non saranno visibili pubblicamente.
  • Nell'account Business Manager (solo dopo che l'app e la pagina sono state aggiunte all'account), è necessario creare quello che viene chiamato un utente di sistema e assegnare a tale utente il ruolo di amministratore (o autorizzazioni) alla pagina Facebook di destinazione.
    • Un utente di sistema è di proprietà dell'account Business Manager e non è legato a un utente specifico. La mia comprensione attuale è che uno dei principali casi d'uso per un utente di sistema è l'accesso programmatico all'API Graph di Facebook (proprio quello di cui abbiamo bisogno).
  • Quindi, per quell'utente di sistema, è necessario generare un token di accesso (che non scadrà mai). Ti verrà chiesto di selezionare per quale app. Seleziona quindi la tua app di destinazione.
  • Sarà quindi necessario utilizzare il token dell'app generato per generare un token di pagina, che non avrà scadenza. La procedura è descritta in questo articolo come:
GET /<PAGE_ID>?fields=access_token&access_token=<SYSTEM_USER_ACCESS_TOKEN>
  • Questo è tutto.

Quel token non scadrà mai e non sarà legato a un particolare utente di Facebook, quindi è esattamente ciò di cui abbiamo bisogno!

L'ultima parte è assicurarti che la tua app Facebook venga approvata da Facebook. In effetti è la parte più importante, perché l'intera procedura è inutile se le persone non vedono i nostri post.

Volevo sapere con certezza che avrei potuto fare affidamento sulla procedura di cui sopra per creare qualcosa per il mio cliente senza che Facebook alla fine lo rifiutasse, quindi, in anticipo (cioè prima di iniziare a lavorare sul progetto del mio cliente), ho seguito l'intero processo di creando una pagina, un'app, un account Business Manager, ecc. Ho verificato la mia attività. Ho inviato la mia app per la revisione. Nella mia richiesta, ero molto specifico sul mio caso d'uso e ho sottolineato che l'app era per "auto-utilizzo" (cioè che l'organizzazione sta sviluppando un'app per se stessa, non per altri utenti di Facebook). Sono stato approvato senza meno di 24 ore.

Alcune altre note sul processo di revisione dell'app:

  • Ho dovuto selezionare una piattaforma per l'app, quindi ho selezionato il sito web .
  • Dovevo indicare perché l'app necessitava delle due autorizzazioni e come le avrebbe utilizzate.
  • Ho dovuto indicare il motivo per cui il revisore non sarebbe stato in grado di accedere alla mia app e provarla (ovvero perché l'app verrà utilizzata da un processo di lavoro).
  • Per gli screencast obbligatori, ho semplicemente presentato le operazioni manuali nel terminale utilizzando l' curlutility (per generare il token della pagina e creare post sulla pagina Facebook). Ho anche mostrato come stavo utilizzando Business Manager per collegare l'utente del sistema alla pagina e generare un token, e così via.
  • Di nuovo, ero molto specifico sul mio caso d'uso e penso che questo abbia aiutato.

Spero che queste informazioni siano utili a persone con casi d'uso simili.


1

Mille grazie a @redhotvengeance per la guida passo passo.

Dopo un po 'di tempo, ora è chiaramente descritto nella documentazione di Facebook:

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

Estensione dei token di accesso alla pagina

Le app possono recuperare un token di accesso alla pagina dagli utenti dell'amministratore della pagina quando si autenticano con l'autorizzazione manage_pages. Se il token di accesso utente utilizzato per recuperare questo token di accesso alla pagina è di breve durata, anche il token di accesso alla pagina sarà di breve durata.

Per ottenere un token di accesso alla pagina di più lunga durata, scambia il token di accesso utente con uno di lunga durata, come sopra, quindi richiedi il token di accesso alla pagina. Il token di accesso alla pagina risultante non avrà alcun tempo di scadenza.


0

Puoi anche copiare e incollare dalla dashboard dell'app su Facebook. I passi:

  1. Vai su https://developers.facebook.com

  2. Seleziona la tua app nell'angolo in alto a destra della pagina (foto di come appare)

  3. Fare clic su Messenger dalle opzioni a sinistra (andrà all'impostazione automaticamente) (foto di come appare)
  4. Vai alla sezione "Generazione token" nella pagina. Seleziona la pagina per la quale desideri generare il token. (foto di come appare quella sezione)
  5. Copia e incolla il token della tua pagina dove ne hai bisogno.

Tieni presente che mentre in teoria il tuo token non scadrà, è direttamente collegato a qualsiasi account Facebook a cui hai effettuato l'accesso. Quindi supponi di cambiare la password o di rimuovere le autorizzazioni tra il tuo account e la tua app, quindi il tuo token non sarà più valido.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.