【问题标题】:Facebook Javascript SDK: Publish actions with custom Open Graph objectsFacebook Javascript SDK:使用自定义 Open Graph 对象发布操作
【发布时间】:2013-05-15 13:36:48
【问题描述】:

我正在开发我的 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"});

});

我在命名空间einszwo 下注册了一个名为buy 的打开图形操作。作为对象,我使用默认的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 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));});

谁能帮助我?

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

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

    您不能将您的 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/中都有解释

    【讨论】:

    • Hej Philippe,非常感谢您提供完整示例的完整正确答案。这解决了我的问题,我现在可以使用应用程序拥有的对象了!非常感谢!
    【解决方案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" /> 
    

    【讨论】:

    • 您好,Mikolay,感谢您的帮助!现在事情已经变得更有意义了;-) 我现在可以在 Facebook 上发帖了。但该活动并未出现在“测试号”好友的任何消息流中。如果我使用给定的 id 访问它,我可以看到它,否则它不会出现在任何地方。我必须做一些特别的事情来向我的朋友展示这项活动吗?
    • 是的,您必须提交您的操作以供审核​​ - developers.facebook.com/apps/APP_ID/reviews 您必须提供带有屏幕截图的重现步骤 - 理想情况下,当您将使用名为“Open Graph Test User”的特殊测试用户时 - 您可以登录到通过点击developers.facebook.com/apps/APP_ID/roles 中的“切换到”此帐户@ BTW FB 有用于存档的特殊 API - developers.facebook.com/docs/howtos/achievements
    • 你是对的,这个批准是有效的,但我们很难实现它。我们真的很想在 Facebook Javascript SDK 中使用 Facebook 托管对象。有人搞定这个吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    相关资源
    最近更新 更多