Accès hors ligne à Facebook étape par étape

MISE À JOUR : la permission Facebook offline_access est obsolète. Veuillez vous référer à la documentation officielle pour plus d’informations.
Vous aurez jusqu’au 1er mai 2012 , date à laquelle ce paramètre sera désactivé. reportez-vous à la feuille de route du développeur pour plus d’informations.


Après avoir recherché littéralement 1 jour sur facebook et google pour trouver un moyen pratique et actuel de faire quelque chose de simple:

Je cherche une explication pas à pas pour obtenir un utilisateur hors connexion_access pour une application facebook, puis je l’utilise (clé de session) pour récupérer hors ligne et non dans un navigateur les données d’amis et de profil.

Faites de préférence ceci dans l’API Java de Fb.

Merci.

Et oui j’ai vérifié le wiki facebook.

Mise à jour: quelqu’un?

this: http://www.facebook.com/authorize.php?api_key=&v=1.0&ext_perm=offline_access me donne un access offline_Access, mais comment récupérer la session_key?

Pourquoi facebook ne fait-il que de la documentation simple? Je veux dire qu’il y a environ 600 personnes qui travaillent là-bas?

La même question en apparence: faire en sorte que offline_access fonctionne avec Facebook Ne répond pas à la manière de récupérer la clé de session

Edit: Je suis toujours coincé avec ça. Je suppose que personne n’a vraiment essayé un tel access par lots pour le moment …

Avec la nouvelle API Facebook Graph, les choses sont devenues un peu plus simples mais beaucoup moins bien documentées. Voici ce que j’ai fait pour pouvoir charger mes messages sur le mur en tant que serveur uniquement (pas dans une session de navigateur) script php:

  1. créer une application facebook, si vous n’en avez pas déjà un utilisable pour ce projet http://www.facebook.com/developers/apps.php#!/developers/createapp.php – et activer le mode sandbox / developer! @ Paramètres avancés> Mode bac à sable> Activer (Permet uniquement aux développeurs de votre application de le voir.) Vous devez disposer de l’ID d’application (APP_ID) et de la clé secrète (SECRET_KEY) figurant dans le résumé de votre compte développeur. ancienne clé API.

  2. charger dans votre navigateur, déjà connecté à fb en tant que compte que vous souhaitez que votre application côté serveur se connecte, et cliquez sur “Autoriser” pour les permissions demandées: https://graph.facebook.com/oauth/authorize?client_id=APP_ID&scope=offline_access,read_stream&redirect_uri=http://www.facebook.com/connect/login_success.html

  3. Copiez le paramètre “code” de la chaîne de requête de l’URL obtenue, utilisez-le dans: https://graph.facebook.com/oauth/access_token?client_id=APP_ID&redirect_uri=http://www.facebook.com/connect/login_success.html&client_secret=APP_SECRET&code=CODE_FROM_2 Et copiez le côté droit de access_token = dans le texte de la page résultante, qui sera dans la structure de: APP_ID | HEXNUM-USER_ID | WEIRD_KEY

  4. Téléchargez maintenant à partir de l’API graphique ou de l’API rest classique en utilisant le jeton d’access à oath que vous venez d’obtenir (où SOURCE_ID est l’identifiant facebook de l’utilisateur / du groupe / que vous cherchiez):

      

Notant que les api et les api de graphes ne renvoient pas seulement des structures différentes, mais aussi des informations différentes – alors, je préfère les résultats du rest de l’API (le premier) même si j’aime pouvoir restreindre les champs du nouveau graphique api (le deuxième).

Consultez http://developers.facebook.com/docs/authentication/ dans les sections “Demander des permissions étendues” et “Authentification des utilisateurs dans une application Web” pour les détails officiels (rares).

Si vous voulez faire cela régulièrement, c’est-à-dire par programmation, voici la version automatisée des étapes 2 + 3:

Mettez ceci sur votre serveur Web en tant que “facebook_access_token.php”:

  

Et dirigez les utilisateurs de leurs navigateurs vers: https://graph.facebook.com/oauth/authorize?client_id=APP_ID&scope=offline_access,read_stream&redirect_uri=http://www.example.com/facebook_access_token.php

Si vous voulez enfin utiliser PHP, avec le PHP PHP SDK v3 ( voir sur github ), c’est assez simple. Pour connecter quelqu’un avec l’autorisation offline_access , vous le demandez lorsque vous générez l’URL de connexion. Voici comment tu fais ça.

Obtenir le jeton d’access hors connexion

Tout d’abord, vérifiez si l’utilisateur est connecté ou non:

 require "facebook.php"; $facebook = new Facebook(array( 'appId' => YOUR_APP_ID, 'secret' => YOUR_APP_SECRET, )); $user = $facebook->getUser(); if ($user) { try { $user_profile = $facebook->api('/me'); } catch (FacebookApiException $e) { $user = null; } } 

Si ce n’est pas le cas, vous générez l’URL “Connexion avec Facebook” demandant la permission offline_access :

 if (!$user) { $args['scope'] = 'offline_access'; $loginUrl = $facebook->getLoginUrl($args); } 

Et puis affichez le lien dans votre modèle:

  Login with Facebook  

Ensuite, vous pouvez récupérer le jeton d’access hors connexion et le stocker. Pour l’obtenir, appelez:

 if ($user) { $token = $facebook->getAccessToken(); // store token } 

Utilisez le jeton d’access en mode hors connexion

Pour utiliser le jeton d’access hors connexion lorsque l’utilisateur n’est pas connecté:

 require "facebook.php"; $facebook = new Facebook(array( 'appId' => YOUR_APP_ID, 'secret' => YOUR_APP_SECRET, )); $facebook->setAccessToken("..."); 

Et maintenant vous pouvez faire des appels API pour cet utilisateur:

 $user_profile = $facebook->api('/me'); 

J’espère que cela pourra aider !

J’ai fait un tutoriel il n’y a pas si longtemps sur mon blog. Il ne nécessite pas de plugins ou autres, il est fait en PHP, et je l’ai testé. Je l’ai fait principalement pour les messages sur le mur, mais après vous être authentifié, vous pouvez utiliser n’importe quelle fonction.

EDIT: Post n’existe plus. FB API est mis à jour quand même …

Vous souhaitez commencer par lire la section Flux côté serveur dans le guide d’authentification. Fondamentalement, commencez par cette URL:

 https://www.facebook.com/dialog/oauth 

Ajoutez votre identifiant d’application ( disponible ici ) à l’URL, qui dans le langage OAuth est client_id :

 https://www.facebook.com/dialog/oauth?client_id=184484190795 

Ajoutez la permission ou la scope offline_access dans le langage OAuth:

 https://www.facebook.com/dialog/oauth?client_id=184484190795&scope=offline_access 

Ajoutez un redirect_uri lequel Facebook redirecta après que l’utilisateur ait terminé l’étape d’autorisation (“Autoriser” ou “Ne pas autoriser”, consultez le document pour obtenir le format de réponse ou essayez-le):

 https://www.facebook.com/dialog/oauth?client_id=184484190795&scope=offline_access&redirect_uri=https%3A%2F%2Ffbrell.com%2Fecho 

Si vous suivez le lien ci-dessus , il vous amènera à une invite, puis, en cliquant sur Autoriser / Ne pas autoriser, vous serez redirigé vers une page qui «écho» à la demande. Si vous cliquez sur Autoriser, vous obtiendrez un paramètre de code que vous pourrez échanger contre un access_token en effectuant une requête HTTP sur Facebook à partir de votre serveur.

 https://graph.facebook.com/oauth/access_token?client_id=184484190795&client_secret=XXX&code=YYY&redirect_uri=ZZZ 

Vous devez transmettre votre client_id , votre secret d’application doit être transmis en tant que client_secret , le même redirect_uri que vous avez utilisé précédemment et le code vous avez reçu en tant que réponse. Cela retournera le offline_access activé pour cet utilisateur.

Une chose à garder à l’esprit est que même si vous demandez offline_access votre application doit gérer correctement les access_tokens invalides ou expirés, car cela peut se produire pour diverses raisons.

Je connais deux solutions: Java et JavaScript

Java: a. code de servlet (n’oubliez pas d’importer les jar pertinents):

 Ssortingng url="http://www.facebook.com/login.php?api_key=YOUR_API_KEY&v=1.0"; url+="&fbconnect=true&return_session=true&req_perms=offline_access,status_update"; url+="&next=http://YOUR_FaceBookCallback_SERVLET"; response.sendRedirect(url); return; 

// Vous serez invité à vous connecter à Facebook et à autoriser les permissions étendues

b. N’oubliez pas de définir votre ConnectUrl (dans votre application de compte Facebook) en tant que http: // YourUrlFromWhereDoYouTurnToTheServletAbove

c. créer un autre servlet: YOUR_FaceBookCallback_SERVLET (voir ci-dessus) avec ce code:

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Ssortingng session = request.getParameter("session"); //from this ssortingng you can obtain your infinite session_key.In order to do this, parse this ssortingng as JSON. //Save it in the database or in the other data storage response.sendRedirect(ThePlaceThatYouWant);} 

ré. Utilisez cette clé de session secrète comme ceci:

 FacebookXmlRestClient client = new FacebookXmlRestClient(YOUR_API_KEY, FACEBOOK_APPLICATION_SECRET,SECRET_SESSION_KEY); client.setIsDesktop(false); client.users_setStatus("YourMessage"); 

Si quelqu’un veut la solution JavaScript (le grand trou dans la sécurité) écrivez-moi

J’ai compris comment “récupérer” la clé de session infinie d’access hors ligne après beaucoup d’éclatement, quelques essais et erreurs et me demander quelles autres méthodes productives j’aurais pu passer à ce point … meilleur

1) Si vous utilisez le facebook-java-api .. alors jetez un coup d’œil au site de démonstration facebook pour “web mobile” sur la façon de formater l’URL pour demander un access hors connexion
http://itsti.me/index.php

 Connect 

2) Comment obtenir la clé de session hors ligne de la session? L’astuce est la suivante: lorsque Facebook redirige l’utilisateur vers la “prochaine” URL après avoir accordé un access hors connexion, vous devriez obtenir la session facebook “à nouveau”. aura la clé de session infinie.
Voici un exemple pour le Web mobile … vous devriez être capable de le trouver pour un site Web ordinaire. L’auth_token est utilisé uniquement pour les sites Web mobiles. vous n’en avez peut-être pas besoin pour un site Web régulier

 FacebookJsonRestClient fbc = new FacebookJsonRestClient(MY_API_KEY, SECRET, sessionKey); Ssortingng auth_token = request.getParameter("auth_token"); System.out.println("infinite session kEY = " + fbc.auth_getSession(auth_token)); 

Pour l’access à la session, j’ai dû utiliser le loginurl fourni par facebook php api, car il semble qu’il y ait deux ou trois variables supplémentaires qu’il envoie dans la requête d’authentification, y compris return_session et session_version. Le nouveau php5-sdk envoie également la requête à login.facebook.com au lieu de https://graph.facebook.com/oauth/authorize . Voici comment je l’ai élaboré:

$b=new facebook(array('appId'=>APP_ID,'secret'=>SECRET))

Pour demander une authentification:

$facebook->getLoginUrl(array('next'=>$redirect_uri,'req_perms'=>$scope))

Rember pour inclure offline_access dans $ scope. Une fois que vous êtes redirigé vers cette page (après vous être connecté à fb et avoir accordé des permissions), vous aurez un fichier $ _GET [“session”] au format json.

Il suffit de le stocker où vous voulez (je le fais dans une firebase database). La prochaine fois que vous souhaitez faire quelque chose avec le compte de l’utilisateur, utilisez simplement ce qui suit:

$session = json_decode($db->query("SELECT ..."));//get session from db $this->facebook->setSession($session);

Après cela, toutes les demandes de l’API seront via l’access de cet utilisateur.

La pire chose à propos de l’api du graphe facebook actuel est (corrigez-moi si je me trompe) que l’api actuel néglige la session (qui semble restr de l’ancienne API) dans toute sa documentation et ne parle que de access_token. Mais l’api actuel (php5-sdk) n’a aucune fonctionnalité pour envoyer une requête réelle en utilisant uniquement le access_token. S’il existe une fonction permettant de démarrer une session en utilisant uniquement access_token, je ne suis pas au courant.