为喜欢或不喜欢我们的Facebook页面的人显示内容

时间:2015-11-26 22:37:09

标签: facebook web facebook-javascript-sdk facebook-like

我搜索this question中突出显示的问题的解决方案。

不幸的是,已接受的解决方案(可追溯到2012年11月21日)不再适用,正如您在this demo中所做的那样。

有人知道为什么吗?

<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
  FB.init({
    appId  : '179378788777832',
    status : true, 
    cookie : true, 
    xfbml  : true  
  });
</script>

<div id="login">
    You are not logged in to FB, Please click<a href="#"> here </a> to login.
</div>

<div id="container_notlike">
YOU DONT LIKE
</div>

<div id="container_like">
YOU LIKE
</div>

JS

var hideLogin = function(){
   $("#login").hide();
}

var showLogin = function(){
   $("#login").show();
}

var doLogin = function(){
    FB.login(function(response) {
      if (response.session) {
           hideLogin();
           checkLike(response.session.uid)
      } else {
        // user is not logged in
      }
    });
}

var checkLike = function(user_id){
    var page_id = "40796308305"; //coca cola
    var fql_query = "SELECT uid FROM page_fan WHERE page_id = "+page_id+"and uid="+user_id;
    var the_query = FB.Data.query(fql_query);

          the_query.wait(function(rows) {

              if (rows.length == 1 && rows[0].uid == user_id) {
                  $("#container_like").show();

                  //here you could also do some ajax and get the content for a "liker" instead of simply showing a hidden div in the page.

              } else {
                  $("#container_notlike").show();
                  //and here you could get the content for a non liker in ajax...
              }
          });        
}

$(document).ready(function(){
    FB.getLoginStatus(function(response) {
      if (response.status === 'connected') {
        hideLogin();
        checkLike(response.authResponse.userID)
      } else {
        showLogin();
      }
     });

    $("#login a").click(doLogin);
});

CSS

body {
width:520px;
margin:0; padding:0; border:0;
font-family: verdana;
background:url(repeat.png) repeat;
margin-bottom:10px;
}
p, h1 {width:450px; margin-left:50px; color:#FFF;}
p {font-size:11px;}

#container_notlike, #container_like, #login {
    display:none
}

我搜索解决方案几个小时,但我找不到任何有效的方法。

谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

不再允许Gating,这就是为什么不可能。获取该信息的唯一可靠方法是授权拥有user_likes权限并使用/me/likes/[page-id]的用户。但是你不会在登录评论中获得批准用于门控的许可。

人们需要喜欢某些东西,因为他们真的想要,而不是因为他们得到了一些东西:

  

仅激励用户登录您的应用,在应用页面上输入促销或在某个地方办理登机手续。不要激励其他行动

来源:https://developers.facebook.com/policy/

顺便说一下,您还可以订阅edge.create事件,了解用户是否只是点击了您喜欢的按钮,但是您之前无法知道用户是否喜欢它:https://developers.facebook.com/docs/reference/javascript/FB.Event.subscribe/

答案 1 :(得分:0)

该代码的问题是不推荐使用FQL。 你不能做你想做的事,这就是为什么需要改变的原因。 如果你的应用程序已经过时,你的代码就可以运行,在更改之前创建,就像不允许使用门控一样,但无论如何,你不能将它用于节目内容。您可以使用这种实现来创建交互式体验,例如您可以更改内容,说“感谢您的喜欢”..或者“与我们联系,喜欢我们的页面......”..

您还可以考虑界面,您显示页面插件,并在用户喜欢之后,您说谢谢...并隐藏页面插件...但用户必须始终能够关闭而不喜欢。

要检查用户是否喜欢某个页面,您需要使用:

FB.api加入'/ me / likes',并回​​复......

if (response.data[likes].name == "Coca-Cola") 

或......更好

if (response.data[likes].id == "40796308305") { 

}

我再说一遍,有一件事与另一件事无关...... 您可以检查用户是否喜欢某个页面,但您无法根据此类资源限制内容。

还有其他方法可以检查它,例如:

如果用户喜欢该页面,则获取对userid / likes / pageid的api调用返回页面信息,如果用户不喜欢该页面,则不返回任何内容。

您将浪费时间尝试控制内容消费。 您的应用必须获得app_likes权限,并且您更好地考虑为用户创建另一种体验,而不是提交类似的内容。

我还认为用于分享,评论和可选择的良好开放图形的内容非常有效,因为我注意到许多人在获取内容后曾经喜欢和不喜欢该页面。

如果你只是... 1分钟后提示FB.UI进行分享,例如,你将获得更多结果..将页面插件定位在战略位置,人们自然会喜欢你的页面..

你可以说改变页面插件元素: 谢谢你的喜好,请与你的朋友分享.... 谁也想...

或者使用回调来触发共享对话框..

答案 2 :(得分:0)

OLD SCHOOL API CALL

方法FB.Event.subscribe()允许应用程序订阅一系列事件,并定义它们触发时的回调函数,不推荐使用。

也不推荐使用FQL查询。

要检查用户是否喜欢某个页面,您需要user.likes权限,因此您可以尝试:

FB.api加入'/ me / likes',并回​​复......

if (response.data[likes].name == "Coca-Cola") 

或......更好

if (response.data[likes].id == "40796308305") { }

还有其他方法可以检查它,例如:

如果用户喜欢该页面,则获取对userid / likes / pageid的api调用返回页面信息,如果用户不喜欢该页面,则不返回任何内容。

您可以使用此调用检查用户是否喜欢某个网页,但您无法根据此类资源限制内容。

2018更新解决方案

但是现在,2018年最好的方法是设置Webhooks。

Webhooks是Facebook和您的服务器之间基于订阅的系统。您的应用程序订阅通过指定的HTTPS端点从Facebook接收更新。

Webhooks at app dashboard

这样,只要对所选主题集及其字段进行更新,您的应用就会收到通知,因此,您可以跟踪用户个人资料的大多数部分的更改,例如关于,照片,帖子,朋友和喜欢。

Webhooks更新通知作为POST请求发送到您提供的回调URL。通知可以是轻量级的,仅表示字段已更新,或者可以包含新更新的值。

webhooks user reference 您可以订阅的用户个人资料字段的完整列表,例如关于,照片,帖子,朋友和喜欢。

webhooks page reference 设置应用程序以接收Webhooks更新的最简单方法是使用App Dashboard,查看Facebook Platform文档以获取更多信息。

Webhooks documentation