检查用户是否使用FB.ui在Share Dialog中发布(或取消)共享到Facebook

时间:2014-10-16 17:32:51

标签: javascript facebook

我正在使用共享对话框,我希望在用户向他/她的时间轴发布内容后发生一些事情。现在我正在使用:

function shareToFB(myName, myLink) {
    $('.overlay-bg').hide();
    FB.ui({
        method: 'share',
        href: myLink,
        name: myName
    }, function(response) {
        if (response && !response.error_code) {
            alert("Something");
        } else {
            alert("Error");
        }
    }
    );
}

但即使用户取消发布,这也会导致“Something”出现。如果用户已将消息发布到他/她的时间线而无需任何权限,我是否可以找到任何方式。我不介意这是否需要我使用不同的共享方法(如提要对话框)。

2 个答案:

答案 0 :(得分:3)

根据文档,响应是发布条目的object_id - 只有在用户授权App时才会填写。这意味着,如果用户未经授权,您无法检测用户是否真的发布了某些内容。

来源:https://developers.facebook.com/docs/sharing/reference/share-dialog

答案 1 :(得分:3)

改为使用Feed Dialog

尽管UI难看,但是通过Feed Dialog成功共享将返回响应对象,如{post_id: "10206702999763274_10206703017843726"},无论用户是否验证您的Facebook应用,而按取消将返回null并关闭弹出窗口将返回undefined

您可以通过转到正常的Facebook用户个人资料设置来测试此行为,并尝试从允许列表中删除您的应用。

这与Share Dialog形成对比,https://developers.facebook.com/docs/sharing/reference/share-dialog#response如果您的应用尚未经过用户身份验证,则无论是否成功共享,都会返回空的响应对象{}

此外,如果您使用直接网址重定向方法而不是js SDK,当用户在共享页面上按取消时,您将收到一个GET参数error_code并且error_message附加到您的重定向目标。

[自2015年12月起] =>使用“订阅源”对话框或“共享”对话框可以访问响应中的帖子ID。要实现此目的,用户必须已登录您的应用程序并将其授予publish_actions。 {{3}}

注意:在撰写本文时(API v2.3),这是正确的。然而,由于Facebook因破坏API行为而臭名昭着,您应该首先自己测试它。