Определить, понравился ли пользователь моей фан-странице - PullRequest
2 голосов
/ 30 марта 2012

РЕДАКТИРОВАТЬ:

Наконец, после долгих поисков, я нашел решение этой проблемы:

вот мой код:

<html xmlns:fb="http://ogp.me/ns/fb#">
    <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js" type="text/javascript"></script>
    </head>
    <body>

        <fb:like href="http://developers.facebook.com" send="true" width="450" show_faces="true"></fb:like>

        <div id="fb-root"></div>

        <script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script>
        <script>
            FB.Event.subscribe('edge.create', function(href, widget) {
                //alert('like '+href);
                document.getElementById('download').style.visibility = 'visible'; 
            });
            FB.Event.subscribe('edge.remove', function(href, widget) {
                //alert('dislike '+href);
                document.getElementById('download').style.visibility = 'hidden'; 
            });
        </script>
        <div id="download">Download</div>
    </body>
</html>

Это работает, как я хотел, нопри загрузке страницы по умолчанию отображается загрузка. Как определить при загрузке страницы, понравилась ли пользователю моя страница или нет?


СТАРЫЙ ВОПРОС У меня есть веб-сайт, на котором у меня есть файлы для пользователей.скачать, и рядом с ним есть кнопка «Нравится».Я просто хочу, чтобы эта кнопка загрузки была видна, только если текущему пользователю понравилась моя страница.

Я новичок в FB Open Graph и JS SDK, я пробовал следующий код (вставленный на моем сайте):

window.fbAsyncInit = function() {
  FB.init({
    appId      : 'XXXXXXXXXXXXXXX',
    status     : true, 
    cookie     : true,
    xfbml      : true,
    oauth      : true,
  });

  FB.getLoginStatus(function(response) {
  if (response.status === 'connected') {
    // the user is logged in and has authenticated your
    // app, and response.authResponse supplies
    // the user's ID, a valid access token, a signed
    // request, and the time the access token 
    // and signed request each expire
    var uid = response.authResponse.userID;
    var accessToken = response.authResponse.accessToken;
    FB.api('me', function(user) {
        if (user) {
          var image = document.getElementById('image');
          image.src = 'http://graph.facebook.com/' + user.id + '/picture';
          var name = document.getElementById('name');
          name.innerHTML = user.name
        }
     });
  } else {
    // the user is logged in to Facebook, 
    // but has not authenticated your app or
    // the user isn't logged in to Facebook.
     FB.login(function(response) {
       if (response.authResponse) {
         FB.api('me', function(user) {
            if (user) {
              var image = document.getElementById('image');
              image.src = 'http://graph.facebook.com/' + user.id + '/picture';
              var name = document.getElementById('name');
              name.innerHTML = user.name
            }
         });
       } else {
         console.log('User cancelled login or did not fully authorize.');
       }
     });
  }
 });
};

(function(d){
   var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
   js = d.createElement('script'); js.id = id; js.async = true;
   js.src = "//connect.facebook.net/en_US/all.js";
   d.getElementsByTagName('head')[0].appendChild(js);
 }(document));

Даже если я вошел в FB и использую тот же браузер, онвсегда возвращает мне следующую ошибку (журнал отладки firebug)

код: 2500 сообщение: «Активный токен доступа должен использоваться для запроса информации о текущем пользователе.»

Я не знаю много оFB API, я что-то не так делаю?

1 Ответ

0 голосов
/ 30 марта 2012

Вот редактирование вашего кода, который должен работать:

    window.fbAsyncInit = function() {
      FB.init({
        appId      : 'XXXXXXXXX',
        status     : true, 
        cookie     : true,
        xfbml      : true,
        oauth      : true,
      });

      FB.getLoginStatus(function(response) {
      if (response.status === 'connected') {
        // the user is logged in and has authenticated your
        // app, and response.authResponse supplies
        // the user's ID, a valid access token, a signed
        // request, and the time the access token 
        // and signed request each expire
        var uid = response.authResponse.userID;
        var accessToken = response.authResponse.accessToken;
        FB.api('me', function(user) {
            if (user) {
              var image = document.getElementById('image');
              image.src = 'http://graph.facebook.com/' + user.id + '/picture';
              var name = document.getElementById('name');
              name.innerHTML = user.name
            }
         });
      } else {
        // the user is logged in to Facebook, 
        // but has not authenticated your app or
        // the user isn't logged in to Facebook.
         FB.login(function(response) {
           if (response.authResponse) {
             FB.api('me', function(user) {
                if (user) {
                  var image = document.getElementById('image');
                  image.src = 'http://graph.facebook.com/' + user.id + '/picture';
                  var name = document.getElementById('name');
                  name.innerHTML = user.name
                }
             });
           } else {
             console.log('User cancelled login or did not fully authorize.');
           }
         });
      }
     });
    };

    (function(d){
       var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
       js = d.createElement('script'); js.id = id; js.async = true;
       js.src = "//connect.facebook.net/en_US/all.js";
       d.getElementsByTagName('head')[0].appendChild(js);
     }(document));

Чтобы пояснить немного, я добавил функцию, которая проверяет, авторизовал ли пользователь ваше приложение еще (FB.getLoginStatus) и в обработчике успеха этой функции я добавил ваш вызов API.В остальной части этой функции я добавил вызов FB.login , который предложит неавторизованным пользователям авторизовать ваше приложение.Если они успешно это сделают, ваш API-вызов будет выполнен, если они решили не делать этого, я просто оставил в примере вызов console.log, но вы можете заменить его на что угодно.

Теперь, чтобы отследить, понравилась ли пользователю ваша страница или нет, вам нужно использовать функцию FB.Event.subscribe , отслеживая событие 'edge.create',

...