Почему API Facebook возвращает пустой массив для альбомов? - PullRequest
1 голос
/ 29 сентября 2011

Я довольно новичок в API Facebook, но я пытался проявить должную осмотрительность, чтобы понять это, но я не могу этого сделать.Я просто пытаюсь получить список альбомов вошедшего в систему пользователя, используя различные приемы, но безрезультатно.Я использую 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} на самом деле мой идентификатор приложения.Таким образом, когда это выполняется, всплывающее окно будет запрашивать доступ к фотографиям пользователей, и это прекрасно работает.Теперь в коде ответ возвращает массив data, который не содержит элементов.В дополнение к выполнению вышеизложенного, я попытался инициировать запрос JSON по следующему URL-адресу, а также непосредственно посетить его в браузере:

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

И это также возвращает пустой массив данных.Используемый мной токен доступа исходит либо из метода FB.login, либо из FB.getLoginStatus.Любая помощь будет принята с благодарностью.Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 20 июля 2012

Это также может произойти, если вы используете JS SDK, поскольку этот процесс аутентификации и диалог аутентификации, по-видимому, полностью отделены от того, что вы настроили в приложении для разработчика.

Вам также необходимо включить необходимые разрешения при вызове FB.login () с использованием необязательного параметра scope, например ...

  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'
  });
3 голосов
/ 29 сентября 2011

Итак, я понял это, поэтому я отвечу на свой вопрос.Все остальные ответы на SO были связаны с разрешениями, но это было не так.Оказывается, что если я посмотрел настройки своего аккаунта (я «пользователь») и посмотрел на приложения, для этого приложения по какой-то причине оно показало, что запрашивает только адрес электронной почты.Я знал, что это не правильно, потому что я также явно просил user_photos.Таким образом, после удаления приложения из моего профиля и повторного запуска подключения, похоже, я могу получить доступ к альбомам в порядке.Я не уверен, что Facebook намеревался сделать это намеренно, но мне кажется, что это потенциальная ошибка.

1 голос
/ 18 октября 2013

У меня была похожая проблема. Несколько решений для stackoverflow в основном объясняли проблему отсутствием необходимых разрешений. Проверьте необходимые разрешения с помощью Graph API explorer или документация (в таблицах есть столбец с разрешениями для каждого поля).

Решение Джонатана фактически дало мне подсказку о том, где я ошибся. У меня была другая проблема, когда я дважды проверил все права доступа, установленные для панели управления моего приложения, которые были правильными, но при входе в систему я указал область с набором разрешений, которые, казалось, переопределяли параметры приложения. :( Мне это показалось странным, но я исправил это, включив другие разрешения в область действия, и моя проблема была решена.

Эффективный способ проверить, устанавливаются ли права с помощью кода, - использовать следующий код:

 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 мне не помогла, поэтому надеюсь, что это кому-нибудь поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...