Как мне опубликовать на стене друга пользователя Facebook публикацию publish_stream, но НЕ offline_access, используя маркер доступа к приложению - PullRequest
4 голосов
/ 28 декабря 2011

Документация для publish_stream гласит: «Позволяет вашему приложению публиковать контент, комментарии и лайки в потоке пользователя и в потоках друзей пользователя. С этим разрешением вы можете публиковать контент в фиде пользователя в любое время, без требуется offline_access. "

Итак, рабочий процесс таков:

  1. FB.login () с областью publish_stream примерно так:

    FB.login(function (response) {
        if (response.authResponse) {
            FB.api('/me/permissions', function (permissions) {
                if (permissions.data[0].publish_stream == 1) {
                    //user has now granted publish_stream to this application
                }
            });
        }
    }, { scope: 'publish_stream' });
    
  2. Используйте C # Facebook SDK для публикации на стене друга этого пользователя с помощью токена доступа приложения.

    var client = new FacebookClient(FacebookAppId, FacebookAppSecret);
    
    // Build the wall post
    dynamic parameters = new ExpandoObject();
    parameters.message = facebookDeliveryQueueItem.MessageBody; // user message
    
    // Post to the wall
    client.Post(facebookRecipientId + "/feed", parameters);
    

Возвращает:

{"error":{"message":"(#200) The user hasn't authorized the application to perform this action","type":"OAuthException"}}

Тем не менее! Если я пытаюсь использовать этот код для публикации на МОЕЙ СОБСТВЕННОЙ стене, он работает просто отлично.

Если пользователь предоставит publish_stream моему приложению, я могу использовать токен доступа APPLICATION (вы можете получить GET для https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id=APP_ID_HERE&client_secret=APP_SECRET_HERE) для публикации на стене этого пользователя, но НЕ для друга этого пользователя. стена.

Так является ли часть документации Facebook и "потоки друзей пользователя" ложью или я делаю это неправильно? Там тонна дезинформации там.

1 Ответ

1 голос
/ 03 января 2012

Вы должны явно указать access_token перед отправкой запроса, если вы пропустите его, используется access_token текущего пользователя.

Добавьте это перед вызовом client.Post

parameters.access_token = FacebookAppId+"|"+FacebookAppSecret;

Документация правильная (в данном случае).Вы можете публиковать сообщения на стене пользователя и его друзей, как только пользователь предоставит вам разрешение publish_stream, используя приложение access_token ( без необходимо запросить offline_access!) С учетом предпочтений владельца стены.Некоторые пользователи устанавливают настройки конфиденциальности, чтобы запретить определенным пользователям / приложениям или кому-либо другому публиковать контент.

Убедитесь, что вы можете публиковать сообщения на этой определенной странице друга (с которой у вас есть проблемы), используя http://facebook.com и с использованием Graph API Explorer (обеспечивающим приложение access_token точно).

...