如此答应的是我只使用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”。
在动作控制器中:
depred_request = Canvas.parse_signed_request(params[:signed_request])
然后检查已解码的请求并显示一页或另一页..(不确定这一点,我对ruby不满意)
depred_request['page']['liked'] class Canvas class << self def parse_signed_request(secret_id,request) enpred_sig, payload = request.split('.', 2) sig = "" urldepre64(enpred_sig).each_byte { |b| sig << "%02x" % b } data = JSON.parse(urldepre64(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 urldepre64(str) enpred_str = str.gsub('-','+').gsub('_','/') enpred_str += '=' while !(enpred_str.size % 4).zero? base64.depre64(enpred_str) end end end
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)