120 votes

Un code d'accès FB de longue durée pour que le serveur puisse obtenir des informations sur les pages FB.

Je suis conscient qu'il y a beaucoup de questions sur les jetons d'accès à Facebook et les problèmes qu'ils causent, mais malgré de nombreuses expérimentations et la lecture de nombreux articles de blog très vagues (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 suis en train de créer un site qui, côté serveur, doit récupérer les publications/statuts d'une seule page Facebook.
  • Je suis un administrateur de cette page Facebook
  • J'ai créé une application Facebook
  • Utilisation de la Explorateur de l'API graphique de Facebook J'ai généré une clé éphémère, connectée à mon application et à mon compte, qui permet à mon compte de visualiser les jetons d'accès à mes pages.
  • J'ai converti ma clé à courte durée de vie en une clé à longue durée de vie (60 jours) selon le scénario 4 de ce

Et c'est là que je suis bloqué. Ma clé de 60 jours fonctionne bien pour que mon serveur puisse extraire les informations nécessaires de la page, mais pour autant que je sache, il n'y a aucun moyen de prolonger cette clé de 60 jours de manière programmatique. Je ne connais pas non plus de moyen de générer une nouvelle clé éphémère sans aller manuellement dans l'explorateur API Facebook Graph et en créer une.

Étant donné que c'est mon serveur qui effectue les requêtes à l'API Facebook et non un système basé sur l'utilisateur (où je pourrais facilement demander qu'un utilisateur autorise à nouveau l'application Facebook), cela crée un système très lourd. Depuis que Facebook a déprécié offline_access Il n'y a pas vraiment de moyen permanent pour que mon serveur tire des informations de ma propre page ? Devrai-je vraiment créer une nouvelle clé à la main et la mettre à jour manuellement sur mon serveur tous les 60 jours ?

Ou y a-t-il quelque chose qui m'échappe ?

Mise à jour :

Le guide étape par étape qui se trouvait précédemment ici a été transféré dans sa propre section. réponse .

0 votes

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 n'enfreint aucune politique de la plateforme FB ? Je demande juste pour être sûr.

2 votes

@asrijaal Facebook's own documentation (voir le scénario 5) indique que ces jetons d'accès aux pages n'expirent pas. Je dirais que l'on peut supposer qu'ils sont conformes aux politiques de Facebook.

0 votes

"J'ai pensé que ce serait bien de laisser un processus clair étape par étape" - le ciel nous en préserve :) Merci @redhotvengeance

194voto

redhotvengeance Points 5661

Il s'agit des étapes qui figuraient précédemment dans la question - elles ont été transférées dans 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 un guide clair, étape par étape, pour tous ceux qui cherchent à faire de même :

  1. Assurez-vous que vous êtes l'administrateur de la page FB dont vous souhaitez extraire des informations.
  2. Créez une application FB (avec le même compte utilisateur que l'administrateur de la page).
  3. Rendez-vous sur le site Explorateur de l'API graphique de Facebook
  4. En haut à droite, sélectionnez l'application FB que vous avez créée dans la liste déroulante "Application".
  5. Cliquez sur "Get Access Token" (Obtenir un jeton d'accès)
  6. Assurez-vous d'ajouter le manage_pages autorisation
  7. Convertissez ce jeton d'accès à courte durée de vie en un jeton à longue durée de vie en effectuant cet appel à l'API graphique : 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 à longue durée de vie qui vous a été renvoyé.
  9. Faites un appel à l'API graphique pour voir vos comptes en utilisant le nouveau jeton d'accès à longue durée de vie : https://graph.facebook.com/me/accounts?access_token=<your long-lived access token>
  10. Saisissez le access_token pour la page dont vous tirerez des informations
  11. Peluche le jeton pour voir qu'il est réglé sur Expires: Never !

Cela devrait suffire. Vous devriez maintenant avoir un jeton d'accès à la page Facebook qui n'expire pas, à moins que.. :

  • 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.

L'une ou l'autre de ces situations rendra le jeton d'accès invalide.

Si vous obtenez (#100) Tried accessing nonexisting field (accounts) on node type (Page) allez à la page Débogueur de jetons d'accès , copier la valeur de User ID et utilisez-le pour remplacer la partie "moi" de l'URL à l'étape 9.

3 votes

Comment et où dois-je faire l'étape 6 ?

5 votes

@StefanMüller Lorsque vous cliquez sur "Get Access Token" sur la page de l'Explorateur de l'API graphique, une boîte de dialogue "Select Permissions" s'affiche. Le site manage_pages se trouve sous l'option Extended Permissions onglet.

2 votes

Super ! Cela fonctionne comme un charme, et cela a été publié en tant que PAGE, pas en tant qu'utilisateur.

17voto

Igy Points 33181

Ce sujet est traité dans le Dépréciation de l'accès hors ligne document

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

5 votes

Soupir. En effet, cela semble être le ticket. J'aurais pu jurer que j'ai essayé toutes les combinaisons possibles de ces étapes - apparemment, j'ai manqué celle qui fonctionne vraiment. Quel ensemble absolument alambiqué d'actions requises. Merci beaucoup pour votre aide !

1 votes

Il y a tellement d'articles sur Internet, mais celui-ci fonctionne vraiment.

0 votes

Y a-t-il un moyen d'obtenir ces 60 jours ? page_access_token par un code en javascript ? Comme la façon d'obtenir user_access_token > FB.getAuthResponse()['accessToken']; Merci !

11voto

focorner Points 662

Une approche qui fonctionne en 2019

J'ai récemment essayé de réaliser quelque chose de similaire (au cas d'utilisation décrit dans ce fil de discussion), mais je voulais m'assurer de respecter les politiques actuelles de Facebook. J'ai donc fait quelques recherches et je partage ici 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-à-dire :

  • Je travaille pour un district scolaire.
  • Ils utilisent un logiciel pour gérer à peu près tout ce qui concerne le transport scolaire.
  • Cet outil leur permet d'envoyer des notifications par courrier électronique (aux abonnés) lorsqu'ils publient des alertes de retard de bus et des alertes de fermeture d'école.
  • De nombreuses personnes de la communauté suivent l'organisation sur sa page Facebook, et c'est le seul endroit où elles recherchent ces alertes.
  • Un employé de l'organisation doit donc 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 leur expiration), de sorte que l'employé doit revenir plus tard pour les supprimer manuellement également.
  • 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 nouvelles notifications (et celles qui ont expiré) et les met à jour (c'est-à-dire les ajouter et les supprimer) sur la page Facebook.

Il s'agit, à mon avis, d'un cas d'utilisation légitime, mais je ne savais pas comment le mettre en œuvre d'une manière qui soit 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 data expire après environ 60 jours. Vous le constaterez également si vous suivez la procédure et que vous inspectez le jeton de page dans le fichier Outil débogueur de jetons FB .

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

Comment faire en 2019

Après plusieurs heures de recherche, je suis tombé sur l'article suivant de la documentation Facebook : Business Login pour les entreprises directes .

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 d'utilisateur Facebook particulier et qui n'expirera pas (sauf si l'application FB est supprimée ou si 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 Directeur commercial compte.

    • Une vérification sera nécessaire 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 transférer cette application vers le même compte Business Manager.

  • L'application devra passer par le processus d'examen de Facebook, car les autorisations suivantes seront nécessaires : manage_pages et publish_pages .

    • Remarque importante Pour que les publications effectuées à l'aide du jeton de page généré soient visibles par des utilisateurs autres que les administrateurs de l'application, cette dernière devra 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 aient été ajoutées au compte), vous devez créer ce que l'on appelle une Utilisateur du système et donnez à cet utilisateur un rôle d'administrateur (ou des autorisations) pour la page Facebook cible.

    • Un utilisateur système est la propriété du compte Business Manager et n'est pas lié à un utilisateur spécifique. D'après ce que je comprends actuellement, l'un des principaux cas d'utilisation d'un utilisateur système est l'accès programmatique à l'API graphique de Facebook (exactement ce dont nous avons besoin).
  • Ensuite, pour cet utilisateur du système, vous devez générer un jeton d'accès (qui n'expirera jamais). Il vous sera demandé de choisir pour quelle application. Vous sélectionnerez alors votre application cible.

  • Vous devrez ensuite utiliser le jeton d'application généré pour générer un jeton de page, qui sera également sans expiration. La procédure est décrite dans cet article comme :

    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 particulier. C'est donc exactement ce dont nous avons besoin !

La dernière partie consiste à s'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 inutile si les gens ne voient pas nos publications.

Je voulais être sûr que je pouvais m'appuyer sur la procédure ci-dessus pour construire quelque chose pour mon client sans que Facebook ne le rejette au final, donc, au préalable (c'est-à-dire avant de commencer à travailler sur le projet de mon client), je suis passé par 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écise quant à mon cas d'utilisation et j'ai insisté sur le fait que l'application était destinée à une "utilisation personnelle" (c'est-à-dire que l'organisation développe une application pour elle-même, et non pour les autres utilisateurs de Facebook). J'ai été approuvé en moins de 24 heures.

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

  • Je devais choisir une plateforme pour l'application, j'ai donc sélectionné site web .
  • Je devais indiquer pourquoi l'application avait besoin de ces deux autorisations et comment elle allait les utiliser.
  • J'ai dû indiquer pourquoi l'examinateur ne pourrait 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é les opérations manuelles dans le terminal à l'aide de la commande curl (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 du 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 m'a aidé.

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

2voto

Athlan Points 1158

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

Après un certain temps, il y a maintenant une description claire dans la documentation de 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 aux pages des utilisateurs de l'administration des pages lorsqu'ils s'authentifient avec l'autorisation manage_pages. Si le jeton d'accès de l'utilisateur utilisé pour récupérer ce jeton d'accès à la page est éphémère, le jeton d'accès à la page sera également éphémère. d'accès à la page sera également éphémère.

Pour obtenir un jeton d'accès de page à plus longue durée de vie, échangez le jeton d'accès User pour un jeton à longue durée de vie, comme ci-dessus, puis demandez le jeton d'accès Page d'accès à la page. Le jeton d'accès de page obtenu n'aura pas de durée d'expiration.

0voto

Heidi Points 21

Vous pouvez également copier et coller depuis le tableau de bord de l'application sur Facebook. Les étapes :

  1. Aller à https://developers.facebook.com

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

  3. Cliquez sur Messenger dans les options sur la gauche (cela ira automatiquement vers les paramètres). (photo de ce à quoi il ressemble)

  4. Allez à la section "Génération de jetons" 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 là où vous en avez besoin.

Gardez à l'esprit que si, en théorie, votre jeton n'expire pas, il est directement lié au compte Facebook auquel vous êtes connecté. Ainsi, si vous changez votre mot de passe ou si vous supprimez les permissions entre votre compte et votre application, votre jeton ne sera plus valide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X