如何检查用户是否有Facebook时间线?

时间:2011-12-17 05:46:19

标签: facebook facebook-graph-api facebook-timeline

我想仅为具有“publish_actions”权限和时间轴的用户启用某些功能。如何检测用户是否启用了时间轴?

4 个答案:

答案 0 :(得分:4)

目前没有API方法来检查用户是否启用了时间轴。

您可以尝试使用"Add To Timeline (beta)" social plugin(将publish_actions作为perms传递)与Facebook JS-SDK Events一起使用。

订阅auth.loginauth.authResponseChange和/或auth.statusChange个事件并检查传递给事件监听器的status response属性,一旦事件触发,用户是connected您可publish action,如果成功,则将用户标记为已安装时间轴的用户。

然而,这有一些缺点:

  • 最好不要在“添加到时间轴”社交插件之外的流程中询问用户publish_actions,以确保他们同时拥有时间轴和权限。
  • 您应该发布操作以确保他们已授予权限,因为这些事件可以是其他用户操作(如密码更改或Facebook用户切换等)。

答案 1 :(得分:3)

1)部分解决方案是检查用户是否有名为“封面照片”的专辑。虽然不是所有会激活时间线的MOST用户都会拥有这张专辑!!

2)确定的方法是实际检索用户个人资料的html内容,并检查它是否有时间轴!!

答案 2 :(得分:1)

最终(可能在不久的将来)每个人的个人资料都会转到时间轴,所以看起来Facebook似乎没有提供一种可靠的方法来检测启用时间轴的应用。

答案 3 :(得分:1)

以下可能的解决方案不需要其他权限请求。如果您在隐藏的DIV中添加Facebook时间轴插件代码,您可以等到FB Canvas完成加载(或网页中的xfbml)并测试该元素的CSS高度。如果用户没有时间轴,则为0px。否则,它将是250px(因为我已经包括它)。 这仅适用于Facebook应用程序(不在Facebook集成网页中)

如果用户未通过将元素样式高度设置为0来激活时间轴,则Facebook会隐藏此插件元素。

将此添加到您的应用页面:

<div id="timeline-hidden" style="display:none">
  <div class="fb-add-to-timeline" data-show-faces="true"></div>
</div>
<div id="timeline-test"></div>

然后,在你的javascript中(这使用jQuery,FYI):

window.fbAsyncInit = function () {
FB.init({ ... }); // after your FB.init code

    FB.Canvas.setDoneLoading(
  function (result) {

    var str_timeline;
    var tlsrc = $("#timeline-hidden").find("iframe").first().css("height");

    if("0px"==tlsrc)
        str_timeline = '<h2 style="color:red">This user DOES NOT have timeline.<h2>';
    else
        str_timeline = "<h2>This user DOES have timeline.</h2>";

    $("#timeline-test").html(str_timeline + ", timeline plugin css height:" + tlsrc + ", loadtime: " + result.time_delta_ms);
  }
);

};

由于潜在的网络延迟, Web集成的可靠性稍差,但可以将该概念修改为一些可行的解决方案:

由于没有在包含FB集成的网站上调用FB.Canvas.setDoneLoading,请修改上面的FB.Canvas.setDoneLoading函数以订阅xfbml.render操作并在测试时设置超时:

window.fbAsyncInit = function(){     FB.init({...}); //在你的FB.init代码之后

$(document).ready(function () {
    FB.Event.subscribe('xfbml.render',
  function () {
    setTimeout( function(){
        var str_timeline;
        var tlsrc = $("#timeline-hidden").find("iframe").first().css("height");

        if("0px"==tlsrc)
            str_timeline = '<strong><span style="color:red">This user DOES NOT have timeline.</span></strong>';
        else
            str_timeline = "<strong>This user DOES have timeline.</strong>";


        $("#timeline-test").html(str_timeline + ", timeline plugin css height:" + tlsrc);
    }, 250);
  }
);

});

};

我在测试中发现将 FB.Event.subscribe('xfbml.render',)移动到 $(文档).ready(function(){.. 。}); 有助于延迟您的应用嵌入Facebook页面时的延迟(需要更长时间才能加载)。刚刚开始对此进行测试,因此可能会或可能不会进行进一步测试。