Facebook Javascript SDK:使用自定义Open Graph对象发布操作

时间:2013-05-15 13:36:48

标签: facebook facebook-graph-api facebook-javascript-sdk phonegap-plugins cordova-2.0.0

我正在研究我的Cordova应用程序以使其更具病毒性。因此,我希望将Facebook和Open Graph API包含在播放用户的新闻流中,当他们在游戏中存档新内容时。我对整个fb和开放图形的东西都是新手,所以请帮助开始使用它。

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

$(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下注册了名为einszwo的开放图表操作。作为对象,我使用默认的object

Defined open graph action and object

目前尚未审核,但我正在使用开发者脸书帐户登录我的设备。

现在我要打电话给这个动作。为此,我使用以下代码:

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

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

谢谢!

塞巴斯蒂安

修改

在对象工作时只粘贴网址的解决方案,但我们想要使用您在Facebook Object Browser中定义的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));});

任何人都可以帮助我吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

听起来你在谈论应用拥有的对象。

  

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

您不能将appcenter网址用作对象(如果您考虑开放图形网址的用途,这实际上没有意义,而且几乎是对Open Graph的误用)

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

Leopluradon

在我的情况下,我为我的咖啡店类型创建了一个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找到一个演示,它不会对你有用,但是你得到了要点。

Result in Browser

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

Result on Facebook

https://developers.facebook.com/docs/opengraph/using-object-api/

中对此进行了解释

答案 1 :(得分: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" />