Damien Doherty
Damien Doherty

Reputation: 23

Getting an open graph action approved - change publish_stream to publish_action

UPDATED CODE:

I have an open graph action pending approval. I received a message back from Facebook saying this:

Your code is currently configured to publish a stream story. You must change your code so that when the test user triggers the action it produces an open graph story. Please make the appropriate changes and resubmit.

I followed all the tutorials regarding publishing actions and my tests all published successfully to my app timeline. The problem is that my app (which is a page tab) is already up and running - so I want to update it and add these new actions.

Are Facebook looking at the code in my current page tab - which is using the fmbl posttofeed share button - or are they looking at the tests I carried out with the new action? Is anyone able to shed some light on this?

This is the code I have in my test page that I used to publish the actions:





        
      function postShare()
      {
          FB.api(
            '/me/namespace:share',
            'post',
            { photo: 'https://domain.com' },
            function(response) {
               if (!response || response.error) {
                  alert('Error occurred : ' + response.error);
               } else {
                  alert('Share was successful! Action ID: ' + response.id);
               }
            });
      }
      

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

          // Init the SDK upon load
          window.fbAsyncInit = function() {
            FB.init({
              appId      : 'APP ID', // App ID
              channelUrl : '//channel url', // Path to your Channel File
              status     : true, // check login status
              cookie     : true, // enable cookies to allow the server to access the session
              xfbml      : true  // parse XFBML
            });

            // listen for and handle auth.statusChange events
            FB.Event.subscribe('auth.statusChange', function(response) {
              if (response.authResponse) {
                // user has auth'd your app and is logged into Facebook
                FB.api('/me', function(me){
                  if (me.name) {
                    document.getElementById('auth-displayname').innerHTML = me.name;
                  }
                })
                document.getElementById('auth-loggedout').style.display = 'none';
                document.getElementById('auth-loggedin').style.display = 'block';
              } else {
                // user has not auth'd your app, or is not logged into Facebook
                document.getElementById('auth-loggedout').style.display = 'block';
                document.getElementById('auth-loggedin').style.display = 'none';
              }
            });

            // respond to clicks on the login and logout links
            document.getElementById('auth-loginlink').addEventListener('click', function(){
              FB.login();
            });
            document.getElementById('auth-logoutlink').addEventListener('click', function(){
              FB.logout();
            }); 
          } 

          function loginUser() {    
         FB.login(function(response) { }, {scope:'publish_actions, email'});     
         }
        



          
            
          

I can't see how this is configured to publish a stream story and not an open graph story? Can anyone help with this is it's driving me insane and can't find anything out there to suggest what I'm doing is not publishing an action.

If, however when they are reviewing my actions they are looking at the code in my live app then of course it is not set up to trigger any open graph stories - as they haven't been approved yet!

Any help would be hugely appreciated.

Many thanks

Upvotes: 2

Views: 1191

Answers (4)

Aamir Quraishi
Aamir Quraishi

Reputation: 144

Basically you cannot post something to an album or any other kind of post when you are using an open graph story. For example the following is not allowed:

            $data = $facebook->api('/me/photos', 'post', $args);//disallowed                
            $facebook->api(
              'me/invig-test:share',
              'POST',
              array(
                    'app_id' => $configParam['appId'],
                    'type' => "test:photo",
                    'photo' => "http://samples.ogp.me/574859819237737",                   
                    'title' => "a photo",
                    'image[0][url]'=>"http://www.testapp.com/".$imgFile,
                    'image[0][user_generated]'=>'true',
                    'message' => $comments,                   
                    'fb:explicitly_shared'=>true,
                )
              );

Instead only do the "share":

            $facebook->api(
              'me/invig-test:share',
              'POST',
              array(
                    'app_id' => $configParam['appId'],
                    'type' => "test:photo",
                    'photo' => "http://samples.ogp.me/574859819237737",                   
                    'title' => "a photo",
                    'image[0][url]'=>"http://www.testapp.com/".$imgFile,
                    'image[0][user_generated]'=>'true',
                    'message' => $comments,                   
                    'fb:explicitly_shared'=>true,
                )
              );

Upvotes: 0

The Facebook testers need the actual code running at your production server. They are going to use a Facebook test user to execute all the steps you described when you submitted the action. They won't use the already published stories. They will probably use the "Open Graph Test User".

You have two options here:

  1. Try to publish the action with every user and if it doesn't work, publish the stream (so that the test user get the action published but your real user publish using the old code)

    --- OR ---

  2. Identify if the user is a test user (by recording the test users ids) and serve him the new code.

Anyway, the real action flow must be executable on the production server.

Upvotes: 0

Vivek Sharma
Vivek Sharma

Reputation: 11

Finally got it working. Steps: 1. Added "Publish_action" Permission 2. Tested on FB Graph API Explorer successfully 3. Modified my Javascript (similar code as the postShare() method above)

FB.api('/me/namespace:purchase',
       'post',
       { product: 'samples.ogp.me/367683346642550'; },
       function(response) {
           if (!response || response.error) {
               alert('Error occured'+response.error);
           } else {
               alert('Post was successful! Action ID: ' + response.id);
           }
       });

Upvotes: 0

Igy
Igy

Reputation: 43816

Your question isn't entirely clear, but both the publish_actions and publish_stream Permissions both allow you to post Open Graph actions. The publish_stream permission however covers many other publishing types and is also optional, and if users remove that permission you won't be able to post OG actions for those users.

Update your authentication code to request publish_actions instead / as well

Upvotes: 1

Related Questions