Facebook JS SDK Опубликовать на стене после проверки разрешений

Я гуглил 2 дня и не могу найти ничего окончательного. Все результаты, с которыми я столкнулся, используют устаревший код, который больше не работает. Пожалуйста помоги.

Мне нужна кнопка, которая при нажатии ...

  1. Проверяет наличие расширенных разрешений
  2. Если разрешения еще не предоставлены, запросите их (user_likes, offline_access, publish_stream)
  3. После получения разрешений опубликуйте запись на стене пользователя
  4. Разрешить отправлять пользователям сообщения на стене, пока они не в сети

Может кто-нибудь помочь?


person Steve    schedule 13.09.2011    source источник
comment
Спасибо OffBySome за этот пример. Глядя на это, я вижу, что был очень близок к решению, но пропустил включение FB.login в response.authResponse. Я осуществлю это сегодня вечером и сообщу о своих выводах.   -  person Steve    schedule 14.09.2011
comment
Что касается offline_access, может ли кто-нибудь подтвердить, что это разрешение не требуется для публикации без взаимодействия с пользователем? Я понимаю, что это немного серая область, но пользователь осознает, что это будет иметь место, и должен специально разрешить это. Насколько я понимаю, этого требовала возможность публиковать сообщения на стене автономного пользователя, так как auto-post: true был отключен. Используя идентификатор пользователя, мне просто нужно включить токен аутентификации без необходимости offline_access?   -  person Steve    schedule 14.09.2011
comment
Я реализовал пример, опубликованный вчера вечером OffBySome, и он отлично сработал. Спасибо :)   -  person Steve    schedule 14.09.2011


Ответы (1)


Все очень просто. Вы можете вызвать FB.login, чтобы получить расширенные разрешения. Затем вы можете вызвать FB.ui, чтобы опубликовать статус (или FB.api, чтобы позвонить / me / feed для публикации без взаимодействия с пользователем, что не одобряется). Чтобы иметь возможность публиковать сообщения на стене позже, вам нужно будет сохранить access_token на своем сервере для дальнейшего использования.

<!DOCTYPE html>
<html>
<body>
<div id="fb-root"></div>
<a href="#" onclick="return postToWall();">Post To Wall</a>
<script src="//connect.facebook.net/en_US/all.js"></script>
<script>
  FB.init({ appId: '**appID**', status: true, cookie: true, xfbml: true, oauth: true });

  function postToWall() {  
    FB.login(function(response) {
      if (response.authResponse) {
        FB.ui({
            method: 'feed', 
            name: 'Facebook Dialogs',
            link: 'https://developers.facebook.com/docs/reference/dialogs/',
            picture: 'http://fbrell.com/f8.jpg',
            caption: 'Reference Documentation',
            description: 'Dialogs provide a simple, consistent interface for applications to interface with users.'
        },
        function(response) {
          if (response && response.post_id) {
            alert('Post was published.');
          } else {
            alert('Post was not published.');
          }
        });
      } else {
        alert('User cancelled login or did not fully authorize.');
      }
    }, {scope: 'user_likes,offline_access,publish_stream'});
    return false;
}
</script>
</body>
</html>
person bkaid    schedule 13.09.2011
comment
Обратите внимание, что дата миграции OAuth2 - 15 октября, и все приложения должны будут использовать OAuth2 после этого. Чтобы включить это, вам нужно добавить oauth: true к вызову FB.init и изменить perms на scope. - person steveax; 13.09.2011
comment
@steveax: ты прав. я забыл и схватил старый пример, который у меня был. я обновил пример. - person bkaid; 13.09.2011
comment
Хорошая сделка, возможно, вы также захотите сделать вызов независимого от протокола библиотеки FB: <script src="//connect.facebook.net/en_US/all.js"></script> с учетом предстоящих требований SSL. - person steveax; 13.09.2011
comment
опять же, вам не требуется offline_access разрешение, чтобы иметь возможность отправлять сообщения, когда пользователь не в сети, достаточно publish_stream и идентификатора пользователя! - person ifaour; 13.09.2011
comment
Я знаю это, но он сказал, что ему это нужно в своем вопросе. - person bkaid; 13.09.2011
comment
как получить токен доступа пользователя с помощью js-sdk любого образца кода? - person Ehsan Sajjad; 11.04.2013