获得批准的开放图表操作 - 将publish_stream更改为publish_action

时间:2012-10-02 19:03:58

标签: facebook-opengraph publish

更新代码:

我有一个待批准的开放图表操作。我从Facebook收到一条消息说:

您的代码目前已配置为发布流故事。您必须更改代码,以便在测试用户触发操作时生成一个打开的图形故事。请进行适当的更改并重新提交。

我遵循了有关发布操作的所有教程,并且我的测试都成功发布到我的应用时间线。问题是我的应用程序(页面选项卡)已经启动并运行 - 所以我想更新它并添加这些新操作。

Facebook是否正在查看当前页面标签中的代码 - 这是使用fmbl posttofeed分享按钮 - 还是他们正在查看我使用新操作执行的测试?有人能够对此有所了解吗?

这是我在测试页面中用来发布操作的代码:





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



          
            
          

我看不出这是如何配置发布流故事而不是开放图故事的?任何人都可以帮忙解决这个问题,这让我感到疯狂,无法找到任何可以表明我正在做的事情就是不发布行动。

但是,如果他们正在审核我的操作,他们正在查看我的实时应用中的代码,那么当然它没有设置为触发任何打开的图形故事 - 因为它们还没有被批准!

非常感谢任何帮助。

非常感谢

4 个答案:

答案 0 :(得分:1)

您的问题并不完全清楚,但publish_actionspublish_stream Permissions都允许您发布Open Graph操作。但是publish_stream权限涵盖了许多其他发布类型,也是可选的,如果用户删除了该权限,您将无法为这些用户发布OG操作。

更新您的身份验证代码,以代替/ {/ p>请求publish_actions

答案 1 :(得分:0)

终于搞定了。脚步: 1.添加了“Publish_action”权限 2.在FB Graph API Explorer上成功测试 3.修改了我的Javascript(与上面的postShare()方法类似的代码)

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

答案 2 :(得分:0)

Facebook测试人员需要在生产服务器上运行的实际代码。他们将使用Facebook测试用户执行您提交操作时描述的所有步骤。他们不会使用已发布的故事。他们可能会使用“Open Graph Test User”。

这里有两个选项:

  1. 尝试向每个用户发布操作,如果它不起作用,请发布流(以便测试用户获取已发布的操作但您的真实用户使用旧代码发布)

    ---或---

  2. 确定用户是否为测试用户(通过记录测试用户ID)并向他提供新代码。

  3. 无论如何,实际操作流程必须在生产服务器上可执行。

答案 3 :(得分:0)

基本上,当您使用开放图形故事时,您无法在相册或任何其他类型的帖子上发布内容。例如,不允许以下内容:

            $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,
                )
              );

而只做“分享”:

            $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,
                )
              );