0

我在我的網站上使用Facebook的開放圖形api和JavaScript SDK。我的目標是讓用戶連接到我的網站,然後在我的網站上執行特定操作後,向用戶Facebook流發佈消息。我有facebook連接功能工作得很好。在連接請求電子郵件,publish_stream,offline_access權限期間。我認爲這些都是我想要做的。現在,當用戶通過Facebook連接連接,我確實得到並捕獲Facebook訪問令牌和祕密,雖然我不知道如何處理它們。Facebook Open Graph API調用問題...需要一個活動的訪問令牌?

根據Facebook的僞劣文檔JavaScript的SDK ......做什麼,我試圖做到這一點說,使用下面的代碼:

var body = 'Reading Connect JS documentation'; 
FB.api('/me/feed', 'post', { message: body }, function(response) { 
    if (!response || response.error) { 
    alert('Error occured'); 
    } else { 
    alert('Post ID: ' + response.id); 
    } 
}); 

我這樣做只是作爲一個測試和而不是提醒響應,我正在將JSON響應字符串化並寫入控制檯。我只想說的流發佈失敗,響應是這樣的:

{"error":{"type":"OAuthException","message":"An active access token must be used to query information about the current user."}} 

如果用戶通過Facebook「連接」到我的網站連接,並接受我指定的所有權限,沒有我有一個有效的訪問令牌?訪問令牌是我必須傳遞給API調用的另一個參數嗎?

回答

1

請確保您有這一切在頁面:

<BODY> 
    <div id="fb-root"></div> 
    <script src="http://connect.facebook.net/en_US/all.js"></script> 
    <script type="text/javascript"> 
    FB.init({ 
     appId : APP_ID, // the app ID you get when you register your app in http://www.facebook.com/developers/ 
     status : true, // check login status 
     cookie : true, // enable cookies to allow the server to access the session 
     xfbml : true // parse XFBML 
    }); 

    if (FB.getSession() != null) { 
     var body = 'Reading Connect JS documentation'; 
     FB.api('/me/feed', 'post', { message: body }, function(response) { 
     if (!response || response.error) { 
      alert('Error occured'); 
     } else { 
      alert('Post ID: ' + response.id); 
     } 
     }); 
    } 
    </script> 
+0

感謝您的回覆。我非常確定FB API是完全加載的,因爲我從API調用中獲得有效的JSON。我也有同樣的FB.init({})調用。查看我對@Josh的帖子的評論以獲取更多信息。 – Ryan 2011-04-25 12:58:26

+0

好吧,我看到我的問題。我沒有調用FB.init()。謝謝! – Ryan 2011-04-25 13:35:59

+0

注意:您不應該在頁面加載時使用此方法。一般來說,如果你不確定,使用FB.getLoginStatus()更安全。 (http://developers.facebook.com/docs/reference/javascript/FB.getSession/) – Anton 2011-08-09 05:23:52

1

上述代碼適用於我的publish_stream權限。確保代碼在javascript api收到訪問令牌之前未運行。運行:

console.log(FB.getSession()) 

直接在FB.api調用上方,以確保您有一個access_token。

+0

感謝您的答覆。我已經提前將您的代碼片段放在var body ...代碼行的上方,並且控制檯寫出'undefined',這對我來說很特殊,因爲直接進入到我登錄此代碼片段的頁面之前Facebook連接...有什麼建議? – Ryan 2011-04-25 12:34:57

+0

我回過頭來看,我沒有在頁面上調用FB.init()。 – Ryan 2011-04-25 13:35:36