2011-09-28 74 views
1

我是相當新的Facebook的API,但我試圖做我的盡職調查,算出這個,但我似乎無法。我只是試圖使用各種技術來獲取登錄用戶的相冊列表,但無濟於事。我使用的JavaScript SDK,我有以下代碼:爲什麼Facebook API返回一個空的專輯數組?

<script src="http://connect.facebook.net/en_US/all.js"></script> 
<script> 

FB.init({ 
    appId:'{MY_APP_ID}', 
    cookie: true, 
    status: true, 
    xfbml: true, 
    oauth : true 
}); 

FB.login(function(response) { 
    if(response.status === 'connected') { 
     FB.api('/me/albums', function(response) { 
      console.log(response); 
     }); 
    } 
}, { scope : 'user_photos' }); 

</script> 

注意{} MY_APP_ID實際上是我的應用程序ID。所以,當它執行時,彈出窗口將請求訪問用戶照片,並且工作正常。現在,在代碼中,響應返回一個不包含元素的data數組。除了嘗試上述,我試圖發起JSON請求到以下網址以及直接訪問它在瀏覽器中:

https://graph.facebook.com/me/albums?access_token=" + response.authResponse.accessToken 

這將返回一個空數據陣列爲好。我使用的訪問令牌來自FB.login方法或FB.getLoginStatus。任何幫助將不勝感激。提前致謝。

回答

3

所以,我想通了,所以我會回答我的問題。 SO上的所有其他答案都與權限有關,但事實並非如此。事實證明,如果我查看了我的帳戶設置(我是'用戶'),並查看了應用程序,出於某種原因,該應用程序顯示它只是請求電子郵件地址。我知道這是不正確的,因爲我明確要求user_photos。因此,在從我的個人資料中刪除應用程序並重新啓動連接後,看起來我可以很好地訪問相冊。我不確定Facebook是否打算通過設計來實現這一點,但它對我來說似乎是一個潛在的錯誤。

+0

插嘴補充說,2016年10月,'user_photos'是具有審查和爲了被Facebook以及經地,誰不是在Facebook的開發者控制檯應用程序的管理員可以使用的項目。 – mixophrygian

3

,如果你正在使用JS SDK,作爲認證過程和認證對話框從您在開發應用程序中所設定的顯然完全獨立的也會發生這種情況。

,您還需要包括

FB.login(function(response) { 
    if (response.authResponse) { 
     M.FB.setIsAuthorised(true); 
     // On success. 
    } else { 
     // On failure. 
    }   
    }, { 
    scope: 'email,friends_birthday,user_photos,friends_photos,publish_actions' 
    }); 
+0

+1。我花了一段時間才弄清楚這一點。謝謝。 –

1

我也有類似的問題,當您使用可選的範圍參數,如調用的FB.login()你想要的權限...。在stackoverflow的幾個解決方案主要是由於缺乏所需的權限問題。通過使用Graph API explorerdocumentation來檢查您需要的權限(這些表有一個稱爲每個字段的權限的列)。

喬納森的解決方案實際上是給了我一個關於我哪裏出了錯線索。我有一個不同的問題,我已經仔細檢查了爲我的應用程序儀表板設置的所有權限,但是在登錄時,我指定了一個具有一組權限的範圍,這些權限似乎覆蓋了應用程序設置。 :(我發現這很奇怪,但是我通過在示波器中包含其他權限來糾正它,並且我的問題得到了解決。

查看是否通過代碼設置了正確權限的有效方法是使用以下代碼:

FB.api({ method: 'fql.query', query: 'SELECT  user_status,friends_status,user_photos,friends_photos,user_location,friends_location FROM  permissions WHERE uid=me()' }, function(resp) {   
for(var key in resp[0]) {   
    if(resp[0][key] === "1")   
     console.log(key+' is granted');   
    else   
     console.log(key+' is not granted');   
}   
}); 

PS:另外,還要確保你的應用程序儀表盤更改的權限,您登出的應用和測試之前再次登錄

我浪費了3小時試圖解決這一問題問題和Facebook的文檔沒有幫助我一點,所以希望這可以幫助別人!

相關問題