Categorie
Facebook PHP

Rilevare se all’utente piace la tua pagina Facebook

Obiettivo di questo tutorial è testare se all’utente “piace” la nostra pagina Facebook quando vi arriva. Significa quindi verificare se ha cliccato o meno sul Like Button, che ha preso il posto del vecchio Become A Fan.

Quando l’utente visita un Tab Page, all’interno di una pagina, Facebook invia il parametro signed_request che contiene un parametro aggiuntivo chiamato page.
Il parametro signed_request è utilizzato per condividere informazioni tra Facebook e le applicazioni, difatti un Page Tab non è altro che un’applicazione inserita come scheda all’interno di una pagina.
In generale il Tab Page è caricato nello stesso modo di una pagina Canvas. Il parametro page contiene un oggetto JSON con le seguenti proprietà:

  • id (conterrà l’id della pagina corrente)
  • admin (conterrà un valore booleano indicante se l’utente è amministratore della pagina)
  • liked (conterrà un valore booleano indicante se all’utente piace la pagina)
Nota: Come in una pagina Canvas non sarà possibile ottenere tutte le informazioni accessibili per la vostra applicazione in signed_request finchè l’utente non autorizza la vostra applicazione.
Signed Request

Il parametro signed_request è la concatenazione di una stringa di firma, un punto (.) ed un oggetto JSON codificato con il MIME base64 (da qui appunto il nome signed_request).
La firma garantisce che i dati ricevuti siano effettivamente inviati da Facebook. Questi sono firmati con il codice segreto dell’applicazione che conosciamo solo noi e Facebook. Per approfondimenti sull’autenticazione di richieste HTTP con HMAC dare un’occhiata a questo bell’articolo in italiano: Autenticare richieste HTTP con HMAC

Lo script

Tornando all’oggetto dell’articolo, il valore di liked è sicuramente un’informazione cruciale per gli amministratori di una pagina che potranno visualizzare determinati messaggi a seconda se l’utente ha cliccato o meno sul pulsante Like. A voi la scelta su come sfruttare l’informazione, di solito si invita l’utente a cliccare sul Like button se ancora non lo ha fatto. Tutto quello che dovremo fare è ottenere la singed request, prelevarne il “carico utile” e decodificarlo fino ad ottenere un array. Vediamo:

<?php
$signed_request = $_REQUEST["signed_request"];
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);
 
if (empty($data["page"]["liked"])) {
    echo "Peccato, nono sei fan della pagina";
} else {
    echo "Bentornato, e congratulazioni per essere un nostro fan";
}
?>
Nota: Non è possibile ottenere attraverso la signed_request l’ID dell’utente che arriva sulla pagina. Difatti Facebook non passa nessuna informazione personale finchè l’utente non ha autorizzato l’applicazione. Spesso gli amministratori di pagine non hanno questa necessità. Tuttavia il caso contrario, l’ID utente sarà passato come parte della signed_request insieme alle altre informazioni.

Con PHP SDK

Se utilizziamo PHP SDK (richiede PHP5 installato sul server in cui gira l’applicazione) possiamo usare direttamente il metodo: getSignedRequest(). Questo recupererà la signed_request da querystring oppure da cookie ed eseguirà il parsing attraverso il metodo protetto parseSignedRequest(). Questo metodo esegue anche il controllo di autenticazione utilizzando appunto il codice segreto dell’applicazione. Esempio:

<?php
require '../src/facebook.php';

$facebook = new Facebook(array(
  'appId'  => IL_TUO_APP_ID,
  'secret' => IL_TUO_APP_SECRET,
  'cookie' => 'true',
));

$data = $facebook->getSignedRequest();
$liked = $data['page']['liked'];
?>
Personalizzazione avanzata

Attraverso la signed_request possiamo ottenere altre informazioni che si possono rilevare utili per la personalizzazione del Tab Page. Possiamo infatti mostrare informazioni diverse a seconda se l’utente è amministratore o meno della pagina ($data['page']['admin']), in base al paese ($data['user']['country']), al locale ($data['user']['locale']) oppure addirittura rendere l’applicazione multipagina e testarne la pagina con ($data['page']['id']).

Risorse

developers.facebook.com/docs/authentication/signed_request/

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.