难以将动作发布到时间轴

时间:2011-09-27 13:53:42

标签: javascript facebook-graph-api facebook-javascript-sdk facebook-opengraph facebook-timeline

我已经尝试在Facebook's Open Graph Tutorial之后构建我们下一个应用程序的基础但由于某种原因,无论我如何尝试发布操作,我都会收到错误。

我会尽可能深入到这里,因为我希望所有开发人员能够掌握新的时间轴非常有用。

我在设置每个操作时使用默认设置定义了战斗操作和英雄对象。 beyondndgame 是我的命名空间。

$id是Facebook用户的用户ID(我尝试使用/ me /,对我来说,直接ID在过去一直没有问题)。

$herourl是一个urlencoded字符串,指向具有以下内容的单独网页:

 <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# transcendgame: http://ogp.me/ns/fb/transcendgame#">
  <meta property="fb:app_id"      content="[my id]"> 
  <meta property="og:type"        content="transcendgame:hero"> 
  <meta property="og:url"         content="http://apps.facebook.com/transcendgame/"> 
  <meta property="og:title"       content="Hercules"> 
  <meta property="og:description" content="As this game is still in development, you can ignore this feed post!"> 
  <meta property="og:image"       content="[an image url]">

应用程序画布页面包含以下代码。它应该将一个新的动作事件发布到用户的时间线,但是一直给我“出错”。我也用样本英雄对象(samples.ogp.me ...)尝试了同样的问题。

<script>
    function doTest()
        {
            FB.api('/<?=$id?>/transcendgame:battle' + 
                        '?hero=<?=$herourl?>','post',
                        function(response) {
                if (!response || response.error) {
                        alert('Error occured');
                } else {
                    alert('Post was successful! Action ID: ' + response.id);
                    }
            });
        }
    </script>

    <a href="#" onclick="doTest(); return false">Test fb post</a>

我正在调用JS SDK并正确运行fb.init。老实说,我不知道问题出在哪里,更不用说如何修复它了。

编辑:我已正确将用户的访问令牌添加到API调用中:

FB.api('/me/transcendgame:battle' + 
                    '?hero=<?=$herourl?>&access=<?=$token?>','post',

但是,我收到以下错误:

Type: OAuthException

Message: (#3502) Object at URL [url] has og:type of 'game'. The property 'hero' requires an object of og:type 'transcendgame:hero'.

这很奇怪,因为网页肯定有正确的og:类型设置,如本问题前面所列。这是我需要解决的一些Facebook打嗝吗?

第二次编辑:修正了最后的问题。

og:url 我曾假设指回应用程序画布的URL,但它需要引用本身。例如,如果您的对象位于mydomain.com/object1.php上,则代码必须为:

<meta property="og:url"         content="http://www.mydomain.com/object1.php">

希望这有助于其他人。

4 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,我将回调更改为更有帮助:

  var fb_url = '/me/YOUR_NAMESPACE?key=value';
  FB.api(fb_url,'post',
    function(response) {
      console.log(response);
      if (!response || response.error) {
        var msg = 'Error occured';
        if (response.error) {
          msg += "\n\nType: "+response.error.type+"\n\nMessage: "+response.error.message;
        }
        alert(msg);
      } else {
        alert('Post was successful! Action ID: ' + response.id);
      }
    }
  );

更新

我终于在时间轴上发了帖子,我必须做的改变是使用BETA版本的JavaScript SDK。 (https://developers.facebook.com/support/beta-tier/

使用此:

<script src="//connect.beta.facebook.net/en_US/all.js#appId=xxx&amp;xfbml=1"></script>

而不是:

<script src="//connect.facebook.net/en_US/all.js#appId=xxx&amp;xfbml=1"></script>

答案 1 :(得分:1)

我最初也有一些难以发布的帖子。 我的问题是该操作的配置设置。 确保将您的操作设置为确切对象。 以下是我设置和工作的一些屏幕:

如果这些设置正确,请检查从Facebook返回的错误代码,在此处发布,我可以为您提供进一步的帮助。

答案 2 :(得分:1)

关于og:url的最后一点 - 这是正确的。您通常可以将OG URL视为&#34;主键&#34;图中的一个对象。

答案 3 :(得分:0)

要澄清一些可能的混淆,og:url与您的HAVE页面的URLurl”不是object1.phpURL 。需要注意的重要一点是,无论您在那里引用META,都必须在页面的html &lt;head&gt;中包含URL个标记。

例如,我将画布页面的META放在那里,这样当有人点击时间轴上的动作中的超链接时,就会打开该页面。只要对象的'Get Code'链接中的{{1}}信息在头部,您就不会收到错误。