Facebook Jak sprawdzić, czy użytkownik polubił stronę i wyświetlił treść?

[2]}próbuję stworzyć aplikację Facebook iFrame. Aplikacja powinna najpierw pokazać obraz, a jeśli użytkownik lubi stronę, otrzyma dostęp do niektórych treści.

Używam RoR, dlatego nie mogę używać Facebook PHP SDK.

Oto mój iFrame HTML, gdy użytkownik nie polubił strony:

<!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>

Oraz, jeśli użytkownik polubił stronę:

<!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>

Author: Christian Fazzini, 0000-00-00

2 answers

Aktualizacja 21/11/2012 @ALL: zaktualizowałem przykład tak, aby działał lepiej i uwzględniał uwagi Chrisa Jacoba i FB Best practices, spójrz na działający przykład tutaj


Witam tak jak obiecałem oto moja odpowiedź przy użyciu tylko javascript:

Treść treści strony:

<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
}

I na koniec 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
      }
    });

});

Więc co to robi ?

Pierwszy to logowanie do FB (jeśli masz już identyfikator użytkownika i jesteś pewien, że twój użytkownik jest już zalogowany na facebook ' u, możesz ominąć dane logowania i zastąpić response.session.uid YOUR_USER_ID (na przykład z aplikacji rails)

Następnie wykonuje zapytanie FQL w tabeli page_fan, a oznacza to, że jeśli użytkownik jest fanem strony, zwraca identyfikator użytkownika, a w przeciwnym razie zwraca pustą tablicę, po czym w zależności od wyników wyświetla div lub inne.

Jest też działające demo tutaj: http://jsfiddle.net/dwarfy/X4bn6/

Używa strony coca-cola jako przykładu, spróbuj go i jak / w przeciwieństwie strona Coca-cola i uruchom go ponownie ...

Wreszcie jakieś powiązane dokumenty:

FQL page_fan table

FBJS FB.Data.zapytanie

Nie wahaj się, jeśli masz jakieś pytania ..

Cheers

UPDATE 2

Jak stwierdził ktoś, jQuery jest wymagane do wersja javascript działa, ale można go łatwo usunąć (służy tylko do dokumentu.gotowe i pokaż/ukryj).

Do dokumentu.gotowy, możesz zawinąć kod w funkcję i użyć body onload="your_function" lub czegoś bardziej skomplikowanego, jak tutaj : Javascript-jak wykryć, czy dokument się załadował (IE 7/Firefox 3), aby zastąpić dokument gotowy.

A do pokazywania i ukrywania rzeczy przydałoby się coś w stylu: document.getElementById("container_like").style.display = "none" or "block" i bardziej niezawodne techniki cross browser Zobacz tutaj : http://www.webmasterworld.com/forum91/441.htm

Ale jQuery jest takie proste:)

UPDATE

{Facebook facebook[10]}relatywnie do komentarza, który zamieściłem tutaj poniżej, jest jakiś kod ruby do dekodowania "signed_request", który zamieszcza facebook na Twoim Canvas URL, gdy pobiera go do wyświetlenia wewnątrz Facebooka.

W kontrolerze akcji:

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

A potem jest to kwestia sprawdzenia zdekodowanego żądania i wyświetlenia jednej lub drugiej strony .. (Nie jestem pewien co do tego po pierwsze, nie podoba mi się ruby)

decoded_request['page']['liked']

I tutaj jest powiązana Klasa Canvas (z fbgraph biblioteki ruby) :

 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
 80
Author: dwarfy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:53:21

Musisz napisać trochę kodu PHP. Po pierwszym kliknięciu zakładki użytkownik może sprawdzić, czy podoba mu się Strona, czy nie. Poniżej znajduje się przykładowy kod

include_once("facebook.php");

    // Create our Application instance.
    $facebook = new Facebook(array(
      'appId'  => FACEBOOK_APP_ID,
      'secret' => FACEBOOK_SECRET,
      'cookie' => true,
    ));

$signed_request = $facebook->getSignedRequest();

// Return you the Page like status
$like_status = $signed_request["page"]["liked"];

if($like_status)
 19
Author: ,
Warning: date() expects parameter 2 to be long, string given in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54