0
votes

Yesterday I changed the application settings and enabled "New Data Permissions" and "New SDKs".

After that the feature of posting message to the users wall stopped working. On my website, users login using facebook API (Graph) and are able to post messages on their wall.

This is my old code that was working fine:

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);
            }
        });
    });
});
}

The function just hangs and nothing happens. I searched on this forum and found this post

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.');
         }
       }
     );  
  }

This one works, but it has two problems 1) Even though when the user logs in first time using graph API and they have granted extended permissions to publish to their wall, this method will everytime ask the user whether to allow or not - The previous one did not do that. 2) This method also allows user to add their comments - I dont want this either.

I want to seamlessly publish to the wall without again explicitly asking for the permission as they have already granted it before.

I am using PHP - any tips will be appreciated Thanks

3

3 Answers

0
votes

I think this is what you're looking for.

Take the permissions upfront. And then publish to stream using Graph API rather than Javascript SDK. (this will not involve the user at all while publishing, and will happen on server side in your php code)

0
votes

I could not figure out a way to do it using Javascript - so I used php instead


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

}


Hope it helps someone

0
votes

try this code to post on wall

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.');
                }
            }
        );

This code works on my app. hope it'll solve your problem too .