通过FB.ui分享对话框动态生成显式共享的开放图谱故事描述。

5

在我对这个主题进行的所有研究中,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对象API - 创建重复对象,一位Facebook工作人员表示这种方式不会被Facebook批准,因为一个用户的一次操作不能生成两篇帖子,而这段代码现在做到了。其中一个将把对象发布到Facebook用户的活动日志中,而另一个则将其发布到活动日志和新闻动态中。
如果我只需要进行一次调用并规定来自FB.ui函数的myobject描述,那就太好了。有人知道如何做到这一点吗?
1个回答

5
我明白了。我遇到的主要问题是我在发布到me/objects(这会将事件发布到用户的活动日志)时,应该发布到app/objects(这会创建对象但不会发布事件)。由于发布到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的对象发布到用户的动态。

希望这可以防止您像我一样花费两天半时间尝试自己解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接