我想仅为具有“publish_actions”权限和时间轴的用户启用某些功能。如何检测用户是否启用了时间轴?
答案 0 :(得分:4)
目前没有API方法来检查用户是否启用了时间轴。
您可以尝试使用"Add To Timeline (beta)" social plugin(将publish_actions
作为perms
传递)与Facebook JS-SDK Events一起使用。
订阅auth.login
,auth.authResponseChange
和/或auth.statusChange
个事件并检查传递给事件监听器的status
response
属性,一旦事件触发,用户是connected
您可publish action,如果成功,则将用户标记为已安装时间轴的用户。
然而,这有一些缺点:
publish_actions
,以确保他们同时拥有时间轴和权限。答案 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页面时的延迟(需要更长时间才能加载)。刚刚开始对此进行测试,因此可能会或可能不会进行进一步测试。