2

更新代码:

我有一个待批准的开放图表操作。我收到了来自 Facebook 的回信,内容是这样的:

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

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

Facebook 是在查看我当前页面选项卡中的代码(使用 fmbl posttofeed 共享按钮),还是查看我使用新操作执行的测试?有人能对此有所了解吗?

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




        
      函数 postShare()
      {
          FB.api(
            '/我/命名空间:共享',
            '邮政',
            {照片:'https://domain.com'},
            功能(响应){
               if (!response || response.error) {
                  alert('发生错误:' + response.error);
               } 别的 {
                  alert('分享成功!Action ID: ' + response.id);
               }
            });
      }
      

         
        
          // 异步加载 SDK
          (函数(d){
             var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
             if (d.getElementById(id)) {return;}
             js = d.createElement('脚本'); js.id = id; js.async = true;
             js.src = "//connect.facebook.net/en_US/all.js";
             ref.parentNode.insertBefore(js, ref);
           }(文档));

          // 加载时初始化 SDK
          window.fbAsyncInit = function() {
            FB.init({
              appId : 'APP ID', // 应用 ID
              channelUrl : '//频道 url', // 频道文件的路径
              status : true, // 检查登录状态
              cookie : true, // 启用 cookie 以允许服务器访问会话
              xfbml : true // 解析 XFBML
            });

            // 监听并处理 auth.statusChange 事件
            FB.Event.subscribe('auth.statusChange', function(response) {
              如果(response.authResponse){
                // 用户已验证您的应用并登录到 Facebook
                FB.api('/me', function(me){
                  如果(我的名字){
                    document.getElementById('auth-displayname').innerHTML = me.name;
                  }
                })
                document.getElementById('auth-loggedout').style.display = 'none';
                document.getElementById('auth-loggedin').style.display = 'block';
              } 别的 {
                // 用户尚未验证您的应用,或未登录 Facebook
                document.getElementById('auth-loggedout').style.display = 'block';
                document.getElementById('auth-loggedin').style.display = 'none';
              }
            });

            // 响应点击登录和注销链接
            document.getElementById('auth-loginlink').addEventListener('click', function(){
              FB.login();
            });
            document.getElementById('auth-logoutlink').addEventListener('click', function(){
              FB.logout();
            });
          }

          功能登录用户(){    
         FB.login(function(response) { }, {scope:'publish_actions, email'});     
         }
        



          
            
          

我看不出这是如何配置为发布流故事而不是开放图故事的?任何人都可以帮助解决这个问题,这让我发疯了,并且找不到任何东西表明我正在做的不是发布行动。

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

任何帮助将不胜感激。

非常感谢

4

4 回答 4

1

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

更新您的身份验证代码以请求publish_actions代替/以及

于 2012-10-02T19:27:35.900 回答
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);
           }
       });
于 2012-10-04T18:38:58.550 回答
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,
                )
              );
于 2013-09-28T22:31:01.737 回答
0

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

您在这里有两个选择:

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

    - - 或者 - -

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

无论如何,真正的动作流必须在生产服务器上是可执行的。

于 2013-02-22T15:07:30.530 回答