2

我正在开发我的 Cordova 应用程序以使其更具病毒性。因此,当他们在游戏中存档新事物时,我想将 Facebook 和 Open Graph API 包含在游戏用户的新闻流中发布。我对整个 fb 和 open-graph 事物完全陌生,所以请帮助开始使用它。

我通过运行以下代码登录一个新用户:

$(login).on("click", function() {
    FB.login(function() {
        console.log("Default Login succeded");
        console.log("Asking for write permissions");
        FB.login(function(rsp) {
            console.log("GOT WRITE PERMISSIONS");
            log(rsp);
        }, {
            scope : 'publish_stream'
        });
    }, {scope:"email"});

});

我注册了一个buy在 namespace 下调用的 Open graph 操作einszwo。作为对象,我使用 default object

定义的开放图形动作和对象

它尚未经过审核,但我正在使用开发人员 Facebook 帐户登录我的设备。

现在我想采取行动。为此,我使用以下代码:

    var obj = {
        title : "I visited Google",
        url : "http://www.google.com"
    };

    function callback(response) {
        console.log(JSON.stringify(response));
    }


    FB.api('me/einszwo:buy','POST',obj, callback);

不幸的是,通话失败,Facebook 回复如下:

{"error":{"type":"Exception",
     "message":"The action you're trying to publish is invalid because it does not 
      specify any reference objects. At least one of the following properties 
      must be specified: object.","code":1611072}}

如果有人可以帮助我解决这个问题或提供我可以查找更多信息的一些信息,那将是非常棒的。

谢谢!

塞巴斯蒂安

编辑

将 url 粘贴为对象的解决方案有效,但我们希望使用您在Facebook 对象浏览器中定义的 Facebook 托管对象。该方法是能够发布用户的活动,如果有人点击该活动,我们希望他们被重定向到我们的应用程序信息页面。

我们不能为每个不同的对象提供一个页面。是否有可能使用 Facebook Javascript SDK 来使用 facebook 上托管的预定义对象?

我真的很想有这样的可能性来创建新对象

   var o = {
        "og:title" : "Test " + new Date(),
        "og:url" : "http://facebook.com/appcenter/**APPNAMESPACE**",
        "og:type" : "Object"

    }
    FB.api('/me/**APPNAMESPACE**:buy', 'POST', {
        object : o
    }, function(response) { console.log(JSON.stringify(response));});

这返回

{"message":"(#3503) \"{\"og:title\":\"Test Thu May 23 2013 12:19:45 GMT+0300 (EEST)\",\"og:url\":\"http://facebook.com/appcenter/einszwo\",\"og:type\":\"Object\"}\" is an invalid value for property \"object\" with type \"Reference\"","type":"OAuthException","code":3503}

或使用预定义 facebook 对象的 ID 的方法,例如:

    FB.api('1234567890', 'POST', {
    }, function(response) { console.log(JSON.stringify(response));});

谁能帮我?

谢谢!

4

2 回答 2

3

听起来您在谈论应用程序拥有的对象。

应用程序拥有的对象。这些对象在您的整个应用程序中使用。它们是公共的,就像自托管对象一样。使用您的应用的任何人都可以看到它们,并且它们可以附加到您的应用创建的任何故事中。

您不能将您的 appcenter url 用作对象(如果您考虑开放图 URL 的用途,这真的没有意义,并且几乎是对开放图的滥用)

您在 cURL 中或使用对象浏览器创建对象

狮鹫

在我的例子中,我为我的咖啡店类型创建了一个 Leopluradon 对象。然后我从创建的结果中获得了 id (149831668534005) 并在我的调用中使用了它

FB.api(
'/me/philippeharewood:code',
'post',
{ coffeeshop: '149831668534005' },
function(response) {
   if (!response || response.error) {
      alert('Error occured');
      console.log(response.error);
   } else {
      alert('Publish was successful! Action ID: ' + response.id);
   }
});

可以在http://philippeharewood.com/facebook/charlie.html找到一个演示,它对你不起作用,但你明白了要点。

浏览器中的结果

然后你可以在你的活动中看到它。

脸书上的结果

这一切都在https://developers.facebook.com/docs/opengraph/using-object-api/中进行了解释

于 2013-05-27T15:47:49.973 回答
2

您应该为打开的图形对象提供一个链接,例如:

FB.api('/me/einszwo:buy','POST',{object:'http://example.com/product1'}, callback);

链接对象 ( http://example.com/product1) 应具有打开的图形标签:

<meta property="fb:app_id" content="133696533402323" /> 
<meta property="og:type"   content="object" /> 
<meta property="og:url"    content="Put your own URL to the object here" /> 
<meta property="og:title"  content="Sample Object" /> 
<meta property="og:image"  content="https://s static.ak.fbcdn.net/images/devsite/attachment_blank.png" /> 
于 2013-05-15T15:13:43.893 回答