【问题标题】:Difficulty posting Actions to Timeline难以将操作发布到时间线
【发布时间】:2011-09-27 13:53:41
【问题描述】:

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

我将在这里尽可能深入,希望它对所有掌握新时间轴的开发人员非常有用。

我已经定义了一个 battle 动作和一个 hero 对象,在设置它们时使用默认设置。 transcendgame 是我的命名空间。

$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:type,如本问题前面所列。这是我需要解决的一些 Facebook 问题吗?

第二次编辑:修复了最后一个问题。

我曾假设 og:url 指向应用程序画布的 URL,但它需要引用 自身。例如,如果您的对象在 mydomain.com/object1.php 上,那么代码必须是:

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

希望这对其他人有所帮助。

【问题讨论】:

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


    【解决方案1】:

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

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

    更新

    我终于在时间轴上得到了一个帖子,我必须做出的改变是使用 JavaScript SDK 的 BETA 版本。 (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>
    

    【讨论】:

    • 希望测试版也为我修复它!我很欣赏你使用的扩展 JS sn-p,我是顽固的 PHP,但对 JS 一无所知。抓取并附加一个访问令牌解决了这个问题,但现在我有另一个没有多大意义的问题。我将编辑我的原始问题以详细说明它。
    • 我将 og:url 设置为页面本身的 URL,所以尝试一下,看看它是否有效。
    【解决方案2】:

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

    如果这些设置正确,请检查从 facebook 返回的错误代码,将其发布在这里,我可以进一步帮助您。

    【讨论】:

      【解决方案3】:

      关于 og:url 的最后一点——没错。您通常可以将 OG URL 视为 Graph 中某个对象的“主键”。

      【讨论】:

        【解决方案4】:

        为了消除一些可能的混淆,og:url 不会“HAVE”与object1.php 页面的url 相同。需要注意的重要一点是,无论您在此处引用的URL 是什么,它都必须在页面的html &amp;lt;head&amp;gt; 中有META 标记。

        例如,我将画布页面的URL 放在那里,以便当有人单击时间轴上的操作中的超链接时,它会打开该页面。只要对象的'Get Code' 链接中的META 信息在头部,就不会出现错误。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-08-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-25
          • 2010-11-24
          • 1970-01-01
          相关资源
          最近更新 更多