当前位置: 首页 > 面试题库 >

Facebook如何检查用户是否喜欢页面并显示内容?

戴高远
2023-03-14
问题内容

我正在尝试创建一个Facebook iFrame应用。该应用程序应首先显示图像,如果用户喜欢该页面,则可以访问某些内容。

我使用RoR,因此无法使用Facebook PhP SDK。

当用户不喜欢该页面时,这是我的iFrame HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<link rel="stylesheet" type="text/css" href="style.css" />
<style type="text/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;}
</style>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1" />
</head>
<body>
<div id="container">
<img src="welcome.png" alt="Frontimg">
</div>

并且,如果用户喜欢该页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<link rel="stylesheet" type="text/css" href="style.css" />
<style type="text/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;}
</style>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1" />
</head>
<body>
<div id="container">
<img src="member.png" alt="Frontimg">
<p>You liked this page</p>

问题答案:

如此答应的是我只使用javascript的答案:

页面正文的内容:

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

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

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

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 {
    display:none
}

最后是javascript:

$(document).ready(function(){

    FB.login(function(response) {
      if (response.session) {

          var user_id = response.session.uid;
          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...
              }
          });


      } else {
        // user is not logged in
      }
    });

});

那么,它是做什么的呢?

首先,它登录到FB(如果您已经有USERID,并且确定您的用户已经登录了Facebook,则可以绕过登录内容,并response.session.uid用YOUR_USER_ID替换(例如从rails应用程序中)

之后,它在page_fan表上进行FQL查询,其含义是,如果用户是页面的支持者,则返回用户ID,否则返回一个空数组,此后根据结果将其显示为div或其他。

更新2

如某人所述,要使javascript版本正常工作,就需要jQuery,但您可以轻松删除它(它仅用于document.ready和show / hide)。

但是jQuery很简单

更新

相对于我在下面发布的评论,是一些红宝石代码,用于解码Facebook提取到其在Facebook内显示时发布到您的CANVAS URL的“
signed_request”。

在动作控制器中:

decoded_request = Canvas.parse_signed_request(params[:signed_request])

然后检查已解码的请求并显示一页或另一页..(不确定这一点,我对ruby不满意)

decoded_request['page']['liked']





 class Canvas

    class << self
      def parse_signed_request(secret_id,request)
        encoded_sig, payload = request.split('.', 2)
        sig = ""
        urldecode64(encoded_sig).each_byte { |b|
          sig << "%02x" % b
        }
        data = JSON.parse(urldecode64(payload))
          if data['algorithm'].to_s.upcase != 'HMAC-SHA256'
          raise "Bad signature algorithm: %s" % data['algorithm']
        end
        expected_sig = OpenSSL::HMAC.hexdigest('sha256', secret_id, payload)
        if expected_sig != sig
          raise "Bad signature"
        end
        data
      end

      private

      def urldecode64(str)
        encoded_str = str.gsub('-','+').gsub('_','/')
        encoded_str += '=' while !(encoded_str.size % 4).zero?
        Base64.decode64(encoded_str)
      end
    end

 end


 类似资料:
  • 问题内容: 我只想检查用户是否喜欢应用程序中带有javascript的页面。 返回值:False 但是我是页面的粉丝,所以它不应该返回true吗? 问题答案: 我也把这根头发撕掉了。仅当用户授予了不理想的扩展权限时,您的代码才起作用。 简而言之,如果您打开forCanvas高级选项,Facebook将在选项卡应用程序中与请求的每个页面一起发送。如果您解析了signed_request,则可以获得有

  • 问题内容: 因此,我在标签上使用了iFrame,并且正在做其中一种“类似障碍”,用户需要喜欢该页面才能查看机密内容。有没有一种更好,更无缝的方法来进行此操作,而不必征求许可? 我知道使用FBML构建的标签页,他们不要求许可,但是我猜这是因为它不是iframe。 谢谢! 问题答案: 当然可以!如文档中所述,Facebook将在以下位置向您发送一些其他详细信息: 当用户导航到Facebook页面时,他

  • 问题内容: 我的查询是我有两个表,其中一个用以下字段调用: 另一个带有以下字段的呼叫: 当表是对的外键表 好吧,我有一个小报告,其中显示了每个用户剩余的空闲天数,但我也想向您显示并以相同的查询显示该用户所请求的天数 例如,休假24天的user1创建一个应用程序,并要求4个休息日和另外10天。除了剩余的24-4-10 = 14天的休息日之外,我还希望您显示给我,您还必须告诉我您已经使用的天数:24-

  • 问题内容: 我正在为网络相册应用程序创建一套Selenium测试。我想测试图像是否实际显示(它包含有效的图像数据)。这样的事情可能吗? 问题答案: 在图像的src符合预期但图像未显示在页面上之前,我遇到过类似的情况。 您可以使用JavaScriptExcecutor检查图像是否显示。 使用以下代码-传递WebElement(图像)- 通过执行此操作,可以验证图像是否已实际加载到网页上。

  • 我在一个网站上工作,我有问题,喜欢脸谱网的Buttom,当有人做一个帖子时,它应该显示喜欢的按钮,但我没有看到它 我看到一个类似的问题,其中一个用户说如果我们使用Facebook LINTER- 这是我从链接中得到的 打开应修复的图形警告 > 推断属性:应该显式提供'og:url'属性,即使可以从其他标记推断值。 推断属性:应明确提供“og:title”属性,即使可以从其他标记推断值。 推断属性:

  • 我知道在SO上有很多类似的问题--其中大多数是指用servlet过滤器实现这个概念。 我使用的是基于表单的声明式安全方法。并且,当一些用户在登录表单上输入他(或她)的凭据(用户名和密码)时,他将被重定向到特定的/安全的jsp页面。该页面内容的一部分是: 现在,如果用户已登录,我将显示他/她的用户名,无论其是否安全的jsp页面。类似这样的事情: 编辑我还想用适当的JSTL命令替换JSP script