Jeton d'accès FB durable permettant au serveur d'extraire les informations de la page FB

114

Je suis conscient qu'il existe de nombreuses questions sur les jetons d'accès Facebook et le chagrin qu'ils causent, mais malgré de nombreuses expérimentations et la lecture de nombreux articles de blog frustrants (FB et autres), j'ai toujours du mal à obtenir une réponse claire à mes besoins. . Permettez-moi de décrire succinctement mon processus jusqu'à présent:

  • Je crée un site qui, côté serveur, doit extraire les publications / statuts d'une seule page Facebook
  • Je suis administrateur de cette page Facebook
  • J'ai créé une application Facebook
  • À l'aide de l' explorateur d'API Facebook Graph , j'ai généré une clé de courte durée, connectée à mon application et à mon compte, qui autorise mon compte à afficher les jetons d'accès de mes pages.
  • J'ai converti ma clé de courte durée en une clé de longue durée (60 jours) dans le scénario 4 de ce

Et voici où je suis coincé. Ma clé de 60 jours fonctionne bien pour que mon serveur extrait les informations nécessaires de la page, mais pour autant que je sache, il n'y a aucun moyen d'étendre cette clé de 60 jours par programme. Je ne connais pas non plus de moyen de générer une nouvelle clé de courte durée sans accéder manuellement à l'explorateur d'API Facebook Graph et en créer une.

Comme c'est mon serveur qui fait les demandes à l'API Facebook et non à un système basé sur l'utilisateur (où je pourrais facilement demander à un utilisateur d'autoriser à nouveau l'application Facebook), cela crée un système très maladroit. Depuis que Facebook est obsolète offline_access, n'y a-t-il vraiment aucun moyen permanent pour que mon serveur tire des informations de ma propre page? Dois-je vraiment créer une nouvelle clé à la main et mettre à jour manuellement mon serveur avec elle tous les 60 jours?

Ou y a-t-il quelque chose qui me manque?

Mettre à jour:

Le guide étape par étape qui a été précédemment trouvé ici a été migré vers sa propre réponse .

redhotvengeance
la source
C'est génial. Je suis dans la même situation et je cherchais des informations sur ce sujet. Est-il sûr que ce jeton ne brise aucune politique de plate-forme FB? Je demande juste d'être sûr.
onigunn du
2
La propre documentation de @asrijaal Facebook (jetez un œil au scénario 5) indique que ces jetons d'accès aux pages n'expirent pas. Je dirais qu'il est prudent de supposer qu'ils respectent les politiques de Facebook.
redhotvengeance
"J'ai pensé que ce serait bien de laisser un processus clair étape par étape" - Dieu nous en préserve :) Merci @redhotvengeance
Steve McGill
Vous avez une faute de frappe avec l'URL de votre jeton d'accès à la page. Devrait être un? pas un & après les comptes. J'ai passé un moment à essayer de comprendre pourquoi cela ne fonctionnait pas. : P
Joren
@Joren Indeed - c'est corrigé maintenant. Merci!
redhotvengeance

Réponses:

188

Ce sont les étapes qui figuraient auparavant dans la question - elles ont été migrées vers cette réponse.

Ayant constaté qu'il est possible de générer un jeton d'accès à la page Facebook qui n'expire pas (avec l'aide de @Igy), voici une description claire et étape par étape pour tous ceux qui recherchent la même chose:

  1. Assurez-vous que vous êtes l'administrateur de la page FB dont vous souhaitez extraire les informations
  2. Créez une application FB (doit être avec le même compte d'utilisateur que l'administrateur de la page)
  3. Rendez-vous sur l' explorateur d'API Facebook Graph
  4. En haut à droite, sélectionnez l'application FB que vous avez créée dans la liste déroulante "Application"
  5. Cliquez sur "Obtenir un jeton d'accès"
  6. Assurez-vous d'ajouter l' manage_pagesautorisation
  7. Convertissez ce jeton d'accès de courte durée en un jeton de longue durée en effectuant cet appel d'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. Récupérez le nouveau jeton d'accès de longue durée
  9. Faites un appel à l'API Graph pour voir vos comptes à l'aide du nouveau jeton d'accès de longue durée: https://graph.facebook.com/me/accounts?access_token=<your long-lived access token>
  10. Prenez le access_tokenpour la page à partir de laquelle vous allez extraire des informations
  11. Pelez le jeton pour voir qu'il est défini sur Expires: Never!

Ça devrait le faire. Vous devriez maintenant avoir un jeton d'accès à la page Facebook qui n'expire pas, sauf si:

  • Vous changez le mot de passe de votre compte Facebook
  • Vous perdez l'accès administrateur pour la page cible
  • Vous supprimez ou désautorisez votre application Facebook

Chacun de ces éléments rendra le jeton d'accès invalide.

Si vous obtenez (#100) Tried accessing nonexisting field (accounts) on node type (Page), accédez au débogueur de jeton d 'accès , copiez la valeur de User IDet utilisez - la pour remplacer la partie «moi» de l' URL à l 'étape 9.

redhotvengeance
la source
2
Comment et où dois-je faire l'étape 6?
Stefan Müller
5
@ StefanMüller Lorsque vous cliquez sur "Obtenir un jeton d'accès" sur la page Explorateur d'API Graph, une boîte de dialogue "Sélectionner les autorisations" apparaît. L' manage_pagesoption est sous l' Extended Permissionsonglet.
redhotvengeance
2
Génial! Cela fonctionne comme un charme, et cela est publié en tant que PAGE, pas en tant qu'utilisateur.
Benjamin Piette
3
Je crois que c'est dépassé maintenant. et vous n'obtenez qu'un jeton d'accès qui expire dans environ deux mois.
Qaiser Wali
7
J'ai fait tout cela maintenant et cela fonctionne sauf que l'identifiant de jeton de longue durée expire au bout de 2 mois et n'est pas infini. De plus, le débogueur de jeton d'accès a un lien en bas du formulaire pour étendre un jeton d'accès de courte durée à un jeton d'accès de longue durée.
SlimIT
15

Ceci est couvert dans le document de dépréciation de l'accès hors ligne

Utilisez le jeton de 60 jours pour l'administrateur de la page pour récupérer un jeton d'accès à la page (via /PAGE_ID?fields=access_tokenou /me/accounts) - le jeton d'accès à la page n'aura pas de délai d'expiration

Igy
la source
5
Soupir. En effet, cela semble être le ticket. J'aurais juré avoir essayé toutes les combinaisons possibles de ces étapes - apparemment, j'ai raté celle qui fonctionne réellement. Quel ensemble absolument compliqué d'actions requises. Merci beaucoup pour votre aide!
redhotvengeance
1
Tant de pièces partout sur Internet, c'est celle qui fonctionne réellement.
Ernesto
Existe-t-il un moyen d'obtenir ces 60 jours page_access_tokenpar code en javascript? Comme la façon d'obtenir user_access_token> FB.getAuthResponse()['accessToken'];Merci!
Tulon
3

Une approche qui fonctionne en 2019

J'essayais récemment de réaliser quelque chose de similaire (au cas d'utilisation décrit dans ce fil), mais je voulais m'assurer de respecter les politiques actuelles de Facebook, alors j'ai fait un peu de recherche et ici je partage ce que j'ai trouvé.

Mon cas d'utilisation

Donc, comme je l'ai déjà dit, mon cas d'utilisation est très similaire à celui décrit ici; C'est:

  • Je travaille pour un district scolaire.
  • Ils utilisent un outil logiciel pour gérer à peu près tout ce qui concerne le transport scolaire.
  • Cet outil leur permet d'envoyer des notifications par e-mail (aux abonnés) lorsqu'ils publient des alertes de retard de bus et des alertes de fermeture d'école.
  • De nombreux membres de la communauté suivent l'organisation sur leur page Facebook, et c'est le seul endroit où ils recherchent ces alertes.
  • Ainsi, un employé de l'organisation doit publier manuellement chaque notification sur la page Facebook (en plus de la créer dans le logiciel de transport). De plus, ces notifications finissent par expirer (ou sont simplement supprimées avant d'expirer), de sorte que l'employé doit revenir plus tard pour les supprimer également manuellement.
  • C'est une perte de temps, donc ce que nous essayons de faire ici est de développer un système simple qui interroge périodiquement la base de données de l'outil logiciel pour les notifications nouvelles (et expirées) et les met à jour (c'est-à-dire ajouter et supprimer) sur la page Facebook.

C'est, à mon avis, un cas d'utilisation légitime, mais je ne savais pas comment le mettre en œuvre d'une manière conforme aux politiques de Facebook.

La réponse acceptée

J'ai suivi les étapes de la réponse acceptée et cela a fonctionné, sauf que les choses semblent avoir changé: maintenant, même si le jeton de page généré n'expire pas, access to datail expire après environ 60 jours. Vous verrez cela également si vous suivez la procédure et inspectez le jeton de page dans l' outil FB Token Debugger .

En outre, le fait que les jetons de page générés soient liés au compte utilisateur est également malheureux, car si l'utilisateur met à jour son mot de passe, le jeton de page est également invalidé.

Comment le faire en 2019

Après plusieurs heures de recherche, je suis tombé sur l'article de documentation Facebook suivant: Business Login for Direct Businesses .

Il s'avère qu'il est désormais possible, en suivant les étapes décrites dans l'article ci-dessus, de générer un jeton de page qui n'est associé à aucun compte utilisateur Facebook particulier et qui n'expirera pas (sauf si l'application FB est supprimée ou le jeton d'application sous-jacent est supprimé, vous savez ...)

Voici donc les étapes et les parties les plus importantes:

  • Vous avez besoin d'un compte Business Manager .
    • Une vérification sera requise et un contrat numérique devra être signé.
  • Vous devez ajouter la page Facebook cible à ce compte.
  • Vous devez créer une application Facebook et la transférer également vers le même compte Business Manager.
  • L'application devra passer par le processus de révision de Facebook, car les autorisations suivantes seront nécessaires: manage_pageset publish_pages.
    • Remarque importante Pour que les publications effectuées à l'aide du jeton de page de génération soient visibles pour les utilisateurs autres que les administrateurs de l'application, cette application doit avoir été publiée et approuvée.
    • Vous pouvez toujours expérimenter le concept sans le soumettre pour examen, mais les messages ne seront pas visibles publiquement.
  • Dans le compte Business Manager (uniquement après que votre application et votre page ont été ajoutées au compte), vous devez créer ce qu'on appelle un utilisateur système et attribuer à cet utilisateur le rôle d'administrateur (ou les autorisations) sur la page Facebook cible.
    • Un utilisateur système appartient au compte Business Manager et n'est pas lié à un utilisateur spécifique. Ma compréhension actuelle est qu'un cas d'utilisation majeur pour un utilisateur système est l'accès par programmation à l'API Graph de Facebook (exactement ce dont nous avons besoin).
  • Ensuite, pour cet utilisateur système, vous devez générer un jeton d'accès (qui n'expirera jamais). Vous serez invité à sélectionner pour quelle application. Vous sélectionnerez ensuite votre application cible.
  • Vous devrez ensuite utiliser le jeton d'application généré pour générer un jeton de page, qui n'expirera également jamais. La procédure est décrite dans cet article comme suit :
GET /<PAGE_ID>?fields=access_token&access_token=<SYSTEM_USER_ACCESS_TOKEN>
  • C'est tout.

Ce jeton n'expirera jamais et ne sera pas lié à un utilisateur Facebook en particulier, c'est donc exactement ce dont nous avons besoin!

La dernière partie consiste à vous assurer que votre application Facebook est approuvée par Facebook. C'est en fait la partie la plus importante, car toute la procédure est sans valeur si les gens ne voient pas nos messages.

Je voulais être sûr que je pouvais me fier à la procédure ci-dessus pour créer quelque chose pour mon client sans que Facebook le rejette à la fin, donc, au préalable (c'est-à-dire avant de commencer à travailler sur le projet de mon client), j'ai parcouru tout le processus de création d'une page, d'une application, d'un compte Business Manager, etc. J'ai vérifié mon entreprise. J'ai soumis mon application pour examen. Dans ma demande, j'ai été très précis sur mon cas d'utilisation et j'ai souligné que l'application était destinée à un «auto-usage» (c'est-à-dire que l'organisation développe une application pour elle-même, pas pour d'autres utilisateurs de Facebook). J'ai été approuvé sans moins de 24 heures.

Quelques autres remarques sur le processus d'examen des applications:

  • J'ai dû sélectionner une plate-forme pour l'application, alors j'ai choisi le site Web .
  • Je devais indiquer pourquoi l'application avait besoin des deux autorisations et comment elle allait les utiliser.
  • J'ai dû indiquer pourquoi le réviseur ne pouvait pas se connecter à mon application et l'essayer (c'est-à-dire parce que l'application sera utilisée par un processus de travail).
  • Pour les screencasts obligatoires, j'ai simplement présenté des opérations manuelles dans le terminal à l'aide de l' curlutilitaire (pour générer le jeton de page et publier des messages sur la page Facebook). J'ai également montré comment j'utilisais Business Manager pour lier l'utilisateur système à la page et générer un jeton, etc.
  • Encore une fois, j'ai été très précis sur mon cas d'utilisation, et je pense que cela a aidé.

J'espère que ces informations seront utiles aux personnes ayant des cas d'utilisation similaires.

focorner
la source
1

Un grand merci à @redhotvengeance pour le guide étape par étape.

Après un certain temps, maintenant il est clairement décrit dans la documentation Facebook:

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

Extension des jetons d'accès aux pages

Les applications peuvent récupérer un jeton d'accès à la page auprès des utilisateurs administrateurs de la page lorsqu'ils s'authentifient avec l'autorisation manage_pages. Si le jeton d'accès utilisateur utilisé pour récupérer ce jeton d'accès à la page est de courte durée, le jeton d'accès à la page sera également de courte durée.

Pour obtenir un jeton d'accès à la page de plus longue durée, échangez le jeton d'accès utilisateur contre un jeton de longue durée, comme ci-dessus, puis demandez le jeton d'accès à la page. Le jeton d'accès à la page résultant n'aura pas de délai d'expiration.

Athlan
la source
0

Vous pouvez également copier et coller à partir du tableau de bord de l'application sur Facebook. Les marches:

  1. Accédez à https://developers.facebook.com

  2. Sélectionnez votre application dans le coin supérieur droit de la page (photo de ce à quoi elle ressemble)

  3. Cliquez sur Messenger dans les options de gauche (il passera au réglage automatiquement) (photo de ce à quoi il ressemble)
  4. Accédez à la section "Token Generation" de la page. Sélectionnez la page pour laquelle vous souhaitez générer le jeton. (photo de ce à quoi ressemble cette section)
  5. Copiez et collez votre jeton de page partout où vous en avez besoin.

Gardez à l'esprit que bien qu'en théorie votre jeton n'expire pas, il est directement lié à tout compte Facebook auquel vous êtes connecté. Donc, disons que vous modifiez votre mot de passe ou que vous supprimez les autorisations entre votre compte et votre application, votre jeton ne sera plus valide.

Heidi
la source