通过FB.ui Share Dialog动态生成明确共享的开放图形故事的描述

时间:2014-05-01 12:19:36

标签: facebook facebook-graph-api facebook-javascript-sdk facebook-opengraph fb.ui

在我就此主题所做的所有研究中,90%的研究已经过时,这让我相信Facebook JS SDK最近有关于明确共享Open Graph故事的变化。我有以下代码:

function postToFB(desc){
FB.ui({
    method: 'share_open_graph',
    action_type: 'mynamespace:myaction',
    action_properties: JSON.stringify({
        myobject: "myobjectid"
    })
}, function(response){});
}

这个问题是,它只会尝试与我在应用设置的Facebook Open Graph部分设置的设置共享myobject。我想使用相同的对象,但每次共享时都用动态'desc'变量更改描述。有谁知道如何做到这一点?我可以在我的应用程序设置的Facebook Open Graph部分中静态设置标题,但我需要在每次共享时动态设置它。

我在Facebook JS SDK中搜索了可以添加到action_properties的其他键/值对,但SDK信息在这方面非常有限。

更新

我修改了代码以包含2个调用,一个用于创建对象,第二个用新对象的信息发布故事。这是代码:

function postToFB(desc){
FB.api(
    'me/objects/mynamespace:myobject',
    'post',
    {
    object: {
        "app_id": myappid,
        "type": "mynamespace:myobject",
        "url": "myurl",
        "title": "mytitle",
        "image": "myimgurl",
        "description": desc
        }
    },
    function(response) {
        console.log(response);
        FB.ui({
            method: 'share_open_graph',
            action_type: 'mynamespace:myaction',
            action_properties: JSON.stringify({
                myobject: response.id
        })
    }, function(r){});
});
}

然而,根据对这个问题的评论:Facebook object API - duplicate objects created Facebook工作人员表示这种方法不会被Facebook批准,因为用户的一个动作不能产生两个帖子,这个代码现在可以做。一个人将该对象发布到Facebook用户的活动日志,然后将其发布到活动日志和新闻源。

如果我可以进行一次调用并且从FB.ui函数本身规定myobject描述应该是什么,那将是很好的。有谁知道怎么做?

1 个答案:

答案 0 :(得分:5)

我明白了。我遇到的主要问题是我发布到我/对象(将事件发布到用户的活动日志),当我应该发布到应用程序/对象(这将创建对象但不发布事件)。由于发布到app / anything需要访问令牌,我不得不在PHP中将服务器端的初始调用更改为:

$request = new FacebookRequest(  
null,  
'POST',  
'/app/objects/mynamespace:myobject', 
array(
        'access_token' => 'myaccesstoken',
    'object' => json_encode(array(
        'app_id' => myappid,
            'url' => 'myurl',
            'title' => 'mytitle',
            'image' => 'myimg',
            'description' => 'mydesc'
        ))
)
);
$response = $request->execute();
$obj = $response->getGraphObject();
echo $obj->getProperty('id');

从那里我可以使用JS脚本将带有新ID的对象发布到用户的feed。

希望能阻止你花2天半的时间试图像我一样自己解决这个问题。