为什么Facebook API会为专辑返回一个空数组?

时间:2011-09-28 22:39:33

标签: facebook-graph-api

我对Facebook API很新,但我已尽力做到尽职尽责,但我似乎无法做到。我只是试图使用各种技术获取登录用户的相册列表,但无济于事。我正在使用JavaScript SDK,我有以下代码:

<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数组。除了尝试上述内容之外,我还尝试向以下URL发起JSON请求,并在浏览器中直接访问它:

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

这也会返回一个空数据数组。我正在使用的访问令牌来自FB.login方法或FB.getLoginStatus。任何帮助将不胜感激。提前谢谢。

3 个答案:

答案 0 :(得分:3)

所以,我想出来了,所以我会回答我自己的问题。 SO上的所有其他答案都与权限有关,但事实并非如此。事实证明,如果我查看我的帐户设置(我是'用户'),并查看应用程序,对于此应用程序,出于某种原因,它显示它只是请求电子邮件地址。我知道这不正确,因为我显然也要求user_photos。因此,在从我的个人资料中删除应用程序并重新启动连接后,看起来我能够很好地访问相册。我不确定Facebook是否打算通过设计来做到这一点,但对我来说这似乎是一个潜在的错误。

答案 1 :(得分:3)

如果您正在使用JS SDK,也会发生这种情况,因为该身份验证过程和身份验证对话显然与您在开发人员应用中设置的内容完全不同。

使用可选的scope参数调用FB.login()时,您还需要包含所需的权限,例如......

  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'
  });

答案 2 :(得分:1)

我有类似的问题。 stackoverflow上的几个解决方案主要归因于缺少必需的权限。使用Graph API explorerdocumentation检查所需权限(表中有一个名为权限的列,用于每个字段)。

Jonathan的解决方案实际上让我知道我哪里出错了。我有一个不同的问题,我已经仔细检查了为我的应用仪表板设置的所有权限是正确的,但在登录时,我已经指定了具有一组权限的范围,这些权限似乎覆盖了应用程序设置。 :(我发现这很奇怪,但我通过在范围中包含其他权限来纠正它,我的问题得到了解决。

查看是否通过代码设置正确权限的有效方法是使用以下代码:

 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');        
}        
});   

P.S:还要确保如果您更改了应用信息中心的权限,则会在测试之前退出应用并再次登录。

我浪费了3个多小时试图修复这个问题,facebook文档对我没什么帮助,所以希望这能帮助别人!