2011-09-28 69 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的文档没有帮助我一点,所以希望这可以帮助别人!

相关问题