FB.api ne fonctionne pas lorsqu'il est appelé juste après FB.init

FB.api ne fonctionne pas lorsqu'il est appelé juste après FB.init. Voici l'extrait de code que j'utilise:

window.fbAsyncInit = function() { FB.init({ appId : window.APP_ID, status : true, cookie : true, oauth : true, channelUrl : window.MASTER_URL + "channel", frictionlessRequests : true }); window.COMPANY.init(); }; (function() { var e = document.createElement('script'); e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; e.async = true; document.getElementById('fb-root').appendChild(e); }()); 

Et voici ma COMPANY.init () et COMPANY.fetchAllFriends ():

 friends: new Array(), init : function() { // TODO COMPANY.fetchAllFriends(); FB.Canvas.setSize($(document).height()); FB.Canvas.setAutoGrow(); }, fetchAllFriends : function() { FB.api('/me/friends', function(response) { if (!response || response.error) { return; } COMPANY.friends = new Array(); $.each(response.data, function(index, value) { COMPANY.friends.push(value.id); }); }); }, 

Où à fetchAllFriends réponse contient une erreur qui indique "Un jeton d'accès actif doit être utilisé pour interroger des informations sur l'utilisateur actuel". Je me suis assuré (via le débogueur des navigateurs) que FB.init s'appelle avant l'appel de FB.api.

Toute aide serait appréciée!

D'accord, j'ai réglé mon problème. J'ai changé:

 window.fbAsyncInit = function() { FB.init({ appId : window.APP_ID, status : true, cookie : true, oauth : true, channelUrl : window.MASTER_URL + "channel", frictionlessRequests : true }); window.COMPANY.init(); }; 

à:

 window.fbAsyncInit = function() { FB.init({ appId : window.APP_ID, status : true, cookie : true, oauth : true, channelUrl : window.MASTER_URL + "channel", frictionlessRequests : true }); FB.Event.subscribe('auth.login', window.COMPANY.init); }; 

Au cas où quelqu'un d'autre voudrait savoir. Ce que j'ai trouvé, c'est que le FB JS SDK n'a pas formé la session utilisateur au moment où FB.init retourne, alors, ce que vous devez faire, c'est de vous abonner à l'événement «auth.login» avec votre fonction init. Plus d'infos ici

Vous ne semblez pas vérifier le statut de l'utilisateur. Tout ce que vous faites est l'initialisation de Facebook, vous ne savez même pas si l'utilisateur est connecté à Facebook ou a un compte Facebook. Vous devez appeler FB.getLoginStatus et vérifier s'ils sont "connectés". S'ils ne sont pas connectés, il n'y a pas moyen d'obtenir un jeton d'accès. S'ils sont connectés, vous obtenez un jeton d'accès.