【问题标题】:Display something for people who like or not like our facebook page为喜欢或不喜欢我们 Facebook 页面的人展示一些内容
【发布时间】:2015-11-26 22:37:09
【问题描述】:

我搜索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
}

我搜索了几个小时的解决方案,但没有找到任何可行的方法。

感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    就像不再允许门控一样,这就是它不可能的原因。获取该信息的唯一可靠方法是授权具有user_likes 权限的用户并使用/me/likes/[page-id]。但是您不会在登录审核中获得类似门控的许可。

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

    仅激励用户登录您的应用、在应用的主页上输入促销信息或在某个地点签到。不要激励其他行为

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

    顺便说一句,您还可以订阅edge.create 事件来查看用户是否刚刚点击了您的“赞”按钮,但您无法确定用户之前是否喜欢过它:https://developers.facebook.com/docs/reference/javascript/FB.Event.subscribe/

    【讨论】:

    • 不,不,不..它可以工作。你是对的概念,而不是解决方案。
    • 我不知道你想告诉什么,但只有一个解决方案,它在我的回答中。 (我/喜欢 user_likes)
    【解决方案2】:

    该代码的问题是 FQL 已被弃用。 你不能做你想做的事,这就是为什么需要改变。 如果您的应用程序是旧的,您的代码将可以工作,在更改之前创建,例如不允许门控,但无论如何,您不能将其用于显示内容。您可以使用这种实现来创建交互式体验,例如,您可以在其中更改内容,说“感谢您的喜欢”.. 或“与我们联系,喜欢我们的页面..”..

    你也可以考虑界面,在哪里显示页面插件,在用户喜欢之后,你说谢谢......并隐藏页面插件......但是用户必须始终能够在不喜欢的情况下关闭。

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

    FB.api 上 '/me/likes',并带有响应...

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

    或者……更好

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

    我再说一遍,一件事与另一件事无关.. 你可以检查用户是否喜欢一个页面,但你不能基于这种资源来限制内容。

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

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

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

    我还认为,具有良好的开放图用于分享、评论和可选点赞的内容更有效,因为我注意到很多人在获得内容后喜欢和不喜欢该页面。

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

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

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

    【讨论】:

    • “并隐藏页面插件” - 这是一个非常糟糕的解决方案,你不应该这样做。
    • 你能告诉我为什么不这样做吗?我说过,使用 Like 按钮回调,应用程序可以在用户执行 like 事件后“隐藏”页面插件,为此存在 like 按钮回调。我们不是在谈论使插件不可见以在没有用户交互的情况下获得喜欢,好吗?
    • 用户需要一个选项来与页面不同。不存在用于隐藏它的like按钮回调。我相信这甚至在规则的某个地方。
    • 我明白你的意思,但是看,我的意思是,如果你显示一个 PAGE PLUGIN 例如,要求用户喜欢,并给时间关闭,并选择取消,如果使用回调,关闭灯箱,在用户喜欢页面后,第一次可以工作,关闭它,我可以保存一个 cookie 以避免它再次打开。但是如果用户返回,他会看到灯箱,而不是如果有有效的 cookie。此外,他可以选择不喜欢页面,因为它会再次打开。在生产中,网站或应用程序上通常存在其他页面插件,并且可以看到。灯箱技术小尺寸。
    • 只有授权用户拥有 user_likes 权限才能获取该信息。没有其他办法了。早些时候,可以在选项卡中检测到类似的状态,是的。但这在很久以前就被删除了,因为不再允许像门控一样。不要仅仅为了得到他们的喜欢而使用弹出窗口来惹恼用户;) - 在您的页面上展示有价值的内容,人们无论如何都会喜欢它。
    【解决方案3】:

    OLD SCHOOL API 调用


    方法 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 更新通知作为 POST 请求发送到您提供的回调 URL。通知可以是轻量级的,仅指示某个字段已更新,也可以包含新更新的值。

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

    webhooks page reference 设置您的应用以接收 Webhooks 更新的最简单方法是使用应用仪表板,查看 Facebook 平台文档以获取更多信息。

    Webhooks documentation

    【讨论】:

    • 他想检测特定用户(已经)是否喜欢某个页面。使用 webhook 是不可能的。它们用于完全不同的任务。
    猜你喜欢
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 2015-08-01
    • 2012-12-08
    相关资源
    最近更新 更多