Перенесен на Facebook Graph API - приложение сейчас не работает - нельзя отправлять сообщения на стену

Вчера я изменил настройки приложения и включил «Новые права доступа к данным» и «Новые SDK».

После этого перестала работать функция отправки сообщения на стену пользователя. На моем веб-сайте пользователи входят в систему с помощью API Facebook (Graph) и могут публиковать сообщения на своей стене.

Это мой старый код, который работал нормально:

function publish_with_permission(permission,action_links,attachment) {
  FB.ensureInit(function() {
    FB.Connect.requireSession(function(){
        //check is user already granted for this permission or not
        FB.Facebook.apiClient.users_hasAppPermission(permission,
        function(result) {
            // prompt offline permission
            if (result == 0) {
                // show the facebook permission dialog
                FB.Connect.showPermissionDialog(permission,
                function(result){
                    if (!result) {
                       FB.Connect.streamPublish('', attachment, action_links, null, "Post this:", jscallback);
                    } else {
                    // permission granted, post without facebook dialog
                       FB.Connect.forceSessionRefresh(function() {
                       FB.Connect.streamPublish('', attachment, action_links, null, "Post this:", jscallback,true);
                    });
                }
            }, true, null);
        } else {
            // permission already granted, post suddenly
            // without facebook dialog
            FB.Connect.streamPublish('', attachment, action_links, null, "Post this:", jscallback,true);
            }
        });
    });
});
}

Функция просто зависает и ничего не происходит. Я искал на этом форуме и нашел этот сообщение

function fb_publish() {
     FB.ui(
       {
         method: 'stream.publish',
         message: 'Message here.',
         attachment: {
           name: 'Nom ici.',
           caption: 'Caption here.',
           description: (
             'description here'
           ),
           href: 'url here'
         },
         action_links: [
           { text: 'Code', href: 'action url here' }
         ],
         user_prompt_message: 'Personal message here'
       },
       function(response) {
         if (response && response.post_id) {
           alert('Post was published.');
         } else {
           alert('Post was not published.');
         }
       }
     );  
  }

Этот работает, но у него есть две проблемы: 1) Даже если пользователь впервые входит в систему с помощью графического API и предоставил расширенные разрешения для публикации на своей стене, этот метод каждый раз будет спрашивать пользователя, разрешить или нет - предыдущий никто этого не делал. 2) Этот метод также позволяет пользователям добавлять свои комментарии - я тоже не хочу этого.

Я хочу беспрепятственно опубликовать на стене, не запрашивая снова разрешение, поскольку они уже давали его раньше.

Я использую PHP - буду благодарен за любые советы. Спасибо


person Gublooo    schedule 30.06.2010    source источник


Ответы (3)


Я думаю, это то, что вы ищете.

Получите разрешения заранее. А затем опубликуйте в потоке с помощью Graph API, а не Javascript SDK. (это вообще не будет вовлекать пользователя во время публикации и произойдет на стороне сервера в вашем PHP-коде)

person cdpnet    schedule 30.06.2010
comment
Я уже делаю это - первый раз, когда пользователь регистрируется - он дает приложению разрешения для публикации на своей стене - ‹fb: login-button perms = publish_stream, offline_access, email, user_about_me, user_location, user_website› ‹/ fb: кнопка входа в систему ›Но она все еще появляется, и вторая проблема, о которой я упоминал, - я не хочу, чтобы пользователь вводил какие-либо комментарии - person Gublooo; 01.07.2010

Я не мог придумать, как это сделать с помощью Javascript, поэтому вместо этого использовал php


try 
{
   $statusUpdate = $facebook->api('/me/feed', 'post', array('message'=> 'example status message', 'cb' => ''));
} 
catch (FacebookApiException $e) 
{

}


Надеюсь, это кому-то поможет

person Gublooo    schedule 01.07.2010
comment
Это правильный вариант, если у вас есть разрешение и вы не хотите, чтобы пользователь добавлял сообщение. - person cdpnet; 02.07.2010
comment
Параметр cb игнорируется. Поддерживаемые параметры задокументированы внизу здесь: developers.facebook.com/docs/reference/ api / post. - person daaku; 13.07.2010

попробуйте этот код, чтобы разместить на стене

FB.ui(
            {
                method: 'feed',
                name: 'NAME',
                link: 'LINK OF THE WEBSITE OR PAGE',
                picture: 'IMAGE_URL IF YOU NEED IT',
                caption: 'Reference Documentation',
                description: "DESCRIPTION"
            },
            function(response) {
                if (response && response.post_id) {
                    alert('Post was published.');

                } else {
                    alert('Post was not published.');
                }
            }
        );

Этот код работает в моем приложении. надеюсь, это решит и вашу проблему.

person Raquibul Islam    schedule 06.12.2011