際際滷

際際滷Share a Scribd company logo
Intesys Talk
Sviluppare applicazioni Facebook



Intesys, 11/07/2011
Sommario
1. Introduzione            4.   In pratica                              5.   Tools
2. Risorse principali           1.   Creare lapp                            1.   Access Token Tool
 1. Canvas Page                 2.   Configurazione                          2.   Test Users
                                3.   Il canvas                               3.   Platform Status
 2. Social Channels
 3. Insights
                                4.   Autorizzazioni                          4.  Debugger
                                5.   Esempio                                 5.  Graph API
3. Concetti chiave della        6.   SDKs                                        Explorer
   piattaforma                       1.      Javascript SDK
                                                                             6. Javascript Test
 1. Social Graph                             1.      Channel File
                                             2.      Autenticazione e
                                                                                 Console
 2. Open Graph                                       Autorizzazione     5.   Funzionalit avanzate
 3. Graph API                                3.      Chiamate alle
                                                     API                     1. FQL
 4. OAuth                            2.      PHP SDK                         2. Dialogs
 5. Authentication                           1.      Installazione e
   1. Server-side Flow
                                                     Inizializzazione        3. Credits
                                             2.      Autenticazione e
   2. Client-side Flow                               Autorizzazione          4. I18N
                                             3.      Chiamata alle           5. Chat API
                                                     API
                                                                        5.   Fonti e ringraziamenti




                                             Intesys Talk
Pagina
Perch辿 sviluppare applicazioni Facebook?
                      E utile sviluppare applicazioni
                      Facebook perch竪 permette di
                      creare un canale social tra il
                      brand per cui lavoriamo e gli
                      utenti finali.




                  Intesys Talk
Pagina
Le 3 risorse principali

 Strumenti messi a disposizione da Facebook
   - Canvas Page
   - Social Channels
   - Insights




                        Intesys Talk
Pagina
Canvas Page
 Le applicazioni FB sono web app liberamente realizzabili con i comuni linguaggi
 orientati allo sviluppo web (php, python,Java, C#,ecc).
 La canvas 竪 molto simile ad un iframe allinterno del quale viene caricata la nostra app.
 La canvas viene popolata attraverso una Canvas URL sulla quale risieder la nostra app.
 Quando un utente visita la nostra app, FB caricher tramite iframe il contenuto della nostra Canvas URL.
 Lo spazio a disposizione allinterno della Canvas 竪 di default di 760px ma pu嘆 essere fluido
 (dal Novembre 2011) ed occupare tutta la larghezza del browser.




                                                Intesys Talk
Pagina
Social Channels
Per portare pi湛 traffico possibile verso la propria app, Facebook mette a disposizione alcuni
canali quali :
  Bookmarks
    Aggiunti in automatico sulla pagina dellutente una volta che ha utilizzato lapp;
    permettono facilmente di far tornare lutente
  Notifiche
    Permettono a pi湛 utenti di ricevere notifiche riguardanti inviti ad utilizzare lapp;
    ne esistono di 2 tipi:
      user generated : richieste tramite popup allutente che decide se inviarle o meno agli amici
      app generated : inviate in automatico dallapp agli utenti che ne hanno espresso il consenso nei
                         permessi (si vedr dopo come richiedere i permessi)
  News feed
    Vengono creati in automatico da Facebook nella parte in alto a destra dellhomepage
    mentre possono essere pubblicati come post sempre dietro consenso esplicito dellutente.




                                                    Intesys Talk
Pagina
Insights
Insights 竪 uno strumento messo a disposizione da Facebook per trackare e quindi poter analizzare
gli utenti, lo sharing fatto in relazione allapplicazione, le performance dellapplicazione, ecc.




                                                Intesys Talk
Pagina
Concetti chiave
Prima di procedere con la creazione di un applicazione bisogna andare a capire com'竪 stato strutturato e
concepito il social network.
- Social Graph
- Open Graph
- Graph API
- Authentication




                                                Intesys Talk
Pagina
Social Graph
                          Tutti i dati presenti all'interno di Facebook sono
                          rappresentati come entit di un immenso grafo(*)
                          dotato di identificato univoco (FB id).
                          Ad esempio, l'utente Mario Rossi con i suoi dati 竪
                          un nodo del grafo, da questo nodo partono
                          connessioni verso altri nodi : gli amici di Mario,
                          le sue foto,ecc. Tutto l'insieme dei milioni e milioni
                          di utenti di Facebook forma il grafo dell'intero
                          social network, che si potr scandagliare per
                          mezzo delle Graph API.


                          (*) Grafo: struttura matematica costituita da un
                          insieme di nodi collegati fra loro.
                          Date le molte propriet, vengono studiati sia in
                          matematica che in informatica.
                          (http://it.wikipedia.org/wiki/Grafo)


               Intesys Talk
Pagina
Open Graph Protocol

LOGP 竪 un protocollo creato da Facebook nel 2008 (evolutosi fino ad oggi  vedi la timeline), che
trasforma qualsiasi pagina web in un entit associabile al grafo sociale di unutente.
Le pagine web che contengono il Like Button di Facebook vengono viste dalla piattaforma come
pagine Facebook e quindi entit del grafo complessivo del social network.
Come nellesempio qui sotto, lutente clicca sul mi piace di una pagina di un film ed in automatico viene
creata la connessione tra lentit (la pagina Facebook del film) e lutente.




                                                   Intesys Talk
Pagina
Modifiche a Open Graph Protocol
                                     Dal settembre 2011, dopo la conferenza
                                     F8, che ha introdotto Timeline, all'interno
                                     di OGP sono state incluse le attivit e gli
                                     oggetti (per ora solo applicazioni) che si
                                     integrano in profondit con il social
                                     network.
                                     Un breve esempio.
                                     Creiamo un'applicazione che fornisce
                                     ricette, durante la configurazione dell'app
                                     si pu嘆 impostare che tipo di attivit l'utente
                                     svolger (in questo caso cucinare).
                                     Quando l'utente aggiunger l'app alla sua
                                     timeline, le attivit specificate durante la
                                     configurazione verranno condivise sul
                                     news feed, sul ticker (l'area in alto a
                                     destra) e sulla propria timeline.


                      Intesys Talk
Pagina
Graph API

 Il cuore della programmazione Facebook 竪 costituito dalle Graph API, collezione di semplici
 servizi Web utili per navigare il grafo sociale.
 Un semplice esempio.
 Collegandosi all'indirizzo https://graph.facebook.com/platform, vedremo apparire una serie di
 informazioni relative all'id (in questo caso l'alias) dell'utente inserito.
 Come detto prima, ogni entit del grafo ha un suo identificativo (numerico o alias) che pu嘆
 essere usato per recuperare i dati sull'entit, qualora ne avessimo i permessi.
 Ogni entit ha i suoi dati, in quanto, ovviamente, un album di foto avr campi diversi dal
 profilo di un utente.
 Per vedere quali campi si possono estrarre da ogni entit ci viene incontro la
 documentazione ufficiale: http://developers.facebook.com/docs/reference/api/
 Altro tool molto utile 竪 il Graph API Explorer, che ci aiuta notevolmente nello sviluppo delle
 apps: https://developers.facebook.com/tools/explorer?method=GET&path=19292868552
 L'impiego delle API verr spiegato a breve, dopo la creazione e configurazione delle nostre
 apps.

                                              Intesys Talk
Pagina
Il protocollo OAuth

 Si aveva la necessit di autenticare applicazioni di terze parti su sistemi esterni per
 dare la possibilit a queste applicazioni di accedere alle API del sistema esterno.
 OAuth 竪 un protocollo open, conforme alla metodologia RESTful, quindi facilmente
 applicabile da tutte quelle applicazioni scritte con linguaggi capacia di aprire socket.
 I principi fondamentali sono 2 (riportati dal sito ufficiale):
  - 竪 un metodo facile per interagire con dati protetti, 竪 un metodo sicuro con cui gli utenti
   forniscono gli accessi.
  - se si interagisce con i dati degli utenti si consiglia Oauth, perch辿 permette di accedere ai
   dati degli utenti senza conoscerne le credenziali.
 In poche parole, lutente autorizzer嘆 unapplicazione ad accedere ai suoi dati presso il
 sistema esterno senza che lapplicazione conosca le credenziali dellutente.


 Lo utilizzano quasi tutti i big del web, come Facebook, Twitter, Yahoo!,Google,ecc.
 Di seguito spiegher嘆 il flusso di autenticazione.


                                              Intesys Talk
Pagina
Il protocollo OAuth
                                     Fase preliminare: lo sviluppatore
                                     dellApplicazione deve registrare questultima
                                          sul
                                     Servizio Esterno, indicando quali dati potranno
                                     essere recuperati.
                                     1 - L utente accede allapplicazione,(2) che
                                     contatta il sistema esterno per ricevere un
                                     Unauthorized Request Token(3);
                                     4 - Lapplicazione ridirige l utente verso il
                                     sistema esterno, passando il token
                                     non autorizzato;
                                     5 - L utente decide di autorizzare lapplicazione
                                     direttamente sul sistema esterno;
                                     6 - Il sistema esterno ridirige lutente verso
                                     lapplicazione passando un Access Token(7);
                                     Lapplicazione accede ai dati dellUtente
                                     presenti sul sistema esterno grazie al token
                                     autorizzato.


                      Intesys Talk
Pagina
Differenze tra OAuth 1.0 e OAuth 2.0

  Allinizio del Maggio 2010, il gruppo di lavoro di OAuth ha rilasciato la bozza della seconda
  versione.
  Le novit rispetto alla versione precedente riguardano:
  -   6 nuovi flussi di autenticazione (user-agent flow,web server flow, device flow, ecc.) per
      le applicazioni che non prevedono browser
  -   Lapplicazione client non necessit per forza di meccanismi di crittografia, ma si utilizza
      una connessione via https per lautenticazione (basato sulle API di Twitter, poi
      implementato anche da facebook)
  -   Autenticazione meno complicata
  -   I token forniti con OAuth 2.0 hanno un tempo di expires breve
  -   Netta separazione dei ruoli tra il server responsabile della gestione delle richieste
      OAuth e il server che gestisce lautorizzazione dellutente.




                                           Intesys Talk
Pagina
Facebook Authentication
Facebook utilizza il protocollo OAuth 2.0 per l'autenticazione e l'autorizzazione.
Supporta diversi flussi per l'autenticazione da integrare con il proprio sito o la propria app,
mobile o desktop che sia.

User Login
Facebook supporta 2 tipi diversi di flusso per il login dell'utente.
 - server-side, noto come flusso con codice di autenticazione
 - client-side, noto come flusso implicito
Quello server-side viene usato per fare una chiamata alle Graph API dal nostro web server,
quello client-side per effettuare le chiamate tramite javascript su browser o da applicazioni mobile
o desktop.

Indipendentemente dal tipo di flusso scelto, l'implementazione di Facebook dei flussi prevede 3 step:
 - user authentication, verifica che l'utente 竪 quello che dice di essere
 - app authorization, verifica che l'utente conosce quali permessi l'applicazione avr sui suoi dati
 - app authentication, verifica che l'utente sta fornendo le sue informazioni e non quelle di altri
Una volta completati tutti questi step, all'app viene fornito uno user access token, che permette all'app
     di
accedere alle informazioni dell'utente.



                                                   Intesys Talk
Pagina
Server-side Flow
L'autenticazione dell'utente e l'autorizzazione dell'app vengono effettuate contemporaneamente attraverso il popup OAuth.
Quando si richiama questo popup si devono passare i parametri app_id (generata al momento di creazione dell'app) e
l'URI di ritorno a cui il browser punter dopo l'autorizzazione dell'app (*).
https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL

(*) Il parametro redirect_uri deve ovviamente far parte del dominio su cui risiede l'app.


Se l'utente 竪 gi loggato, il popup valida il cookie di login salvato sul browser dell'utente, altrimenti vengono
mostrati i campi di login.
Una volta autenticato l'utente viene mostrata la lista di permessi che l'applicazione richiede all'utente.
Di default l'app ha accesso alle informazioni pubbliche dell'utente.
Per richiedere informazioni aggiuntive, come foto, note, link, ecc., si deve aggiungere un altro parametro all'url, cio竪 scope.
Nel parametro scope vanno specificati i permessi da richiedere all'utente.
https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&scope=email,read_stream


Per la lista di tutti i permessi si guardi la reference: http://developers.facebook.com/docs/reference/api/permissions/


NB: Facebook ha verificato una proporzionalit inversa tra il numero di permessi richiesti ed il numero di utenti.




                                                                      Intesys Talk
Pagina
Server-side Flow
Se l'utente non garantisce i permessi l'OAuth Dialog redireziona(via HTTP 302) all'URI passato come parametro con alcuni
parametri aggiuntivi:
http://YOUR_URL?
    error_reason=user_denied&
    error=access_denied&
    error_description=The+user+denied+your+request.
Se l'utente garantisce i permessi l'OAuth Dialog redireziona, come nel precedente, all'URI specificato aggiungendo per嘆 il
parametro code : http://YOUR_URL?code=A_CODE_GENERATED_BY_SERVER
Avendo il parametro code in mano si pu嘆 procedere allo step finale, cio竪 l'app authentication, per ottenere l'access token
da utilizzare per le chiamate API.
Per farlo si devono passare all'URL https://graph.facebook.com/oauth/access_token questi parametri:
-     client_id=YOUR_APP_ID : parametro generato alla creazione dell'app
-     redirect_uri=YOUR_URL : come nello step precedente, 竪 un URI che risiede sul nostro dominio,
      su cui atterreremo una volta autorizzata l'app
-     client_secret=YOUR_APP_SECRET : parametro generato alla creazione dell'app
-     code=THE_CODE_FROM_ABOVE : il codice ottenuto appena prima
quindi
https://graph.facebook.com/oauth/access_token?
    client_id=YOUR_APP_ID&
    redirect_uri=YOUR_URL&
    client_secret=YOUR_APP_SECRET&
    code=THE_CODE_FROM_ABOVE


                                                        Intesys Talk
Pagina
Server-side Flow
Una volta autorizzata l'app, il server ci restituir l'access token.
Insieme all'access token avremo anche il parametro expires, contenente il numero di secondi prima che il token scada.
Ovviamente se il token scade, si dovranno rifare tutti quanti i passaggi precedenti.

NB: per avere un access_token che non scada mai, bisogna richiedere come permesso quello di offline_access,
permesso che per嘆 viene molto spesso negato dagli utenti.


Nel caso di un errore nell'autorizzazione dell'app, il server ci restituir l'errore HTTP 400, contenente nel response
tipo e messaggio di errore.




                                                                Intesys Talk
Pagina
Client-side Flow
La versione client-side usa anch'essa OAuthDialog ma con un parametro aggiuntivo che 竪 il response_type.
https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&response_type=token
Anche qui, per i permessi aggiuntivi, si usa il parametro scope=permessi_da_richiedere.
Una volta che lutente 竪 autenticato ed ha autorizzato lapp, il browser reindirizza al redirect_uri, per嘆
anzich辿 passare il parametro code, passa laccess_token allinterno di un frammento dellURI (#access_token).
Dato che laccess_token 竪 passato tramite frammento dellURI, solo codice client-side potr estrapolarlo.




                                                           Intesys Talk
Pagina
Creare lapp
Se non si sono mai create applicazioni, bisogna visitare la Developer app, che ci autorizza a creare
applicazioni.
Per creare un app poi verr verificato laccount dello sviluppatore attraverso la conferma del numero di
telefono o della carta di credito.




                                                  Intesys Talk
Pagina
Configurare lapp
1. Cliccando su +Crea Applicazione, avremo questo
popup in cui specificare nome dellapplicazione e
namespace (vedremo dopo a cosa servir).
2. Il passo successivo prevede linserimento di un
CAPTCHA fino ad arrivare al pannello di gestione
dellapplicazione (figura 2).
3. Arrivati a questo punto Facebook avr generato:
App ID e App Secret, dopo aver finito di compilare i
campi Contact Email e Category andiamo ad inserire i
campi Canvas URL e Secure Canvas URL(*) con il
nostro dominio sulla quale risiede lapp.
La nostra app dovr risiedere o sulla document root o su
una sottocartella del dominio.
Ad esempio:
https://www.gardaland.it/facebook/TabRaptorCountdown/



(*) Dal 1属 Ottobre 2011 tutte le applicazioni su Facebook
dovranno essere su domini con certificato HTTPS, mentre
la fase di testing si pu嘆 fare con il dominio senza certificato.

                                                              Intesys Talk
Pagina
Dimensioni del Canvas
La nostra app viene comunque caricata allinterno di Facebook, quindi ci sono
imposizioni da parte della piattaforma sulle dimensioni.




Canvas width
La larghezza della nostra app pu嘆 essere impostata su fissa a 760px o su fluida.
Nel qual caso la larghezza fosse fluida liframe che contiene lapp avr width al 100%.
Se il nostro contenuto sfora la larghezza massima verr mostrata la scrollbar sotto o tagliato
parte del contenuto.
Canvas height
Laltezza del canvas pu嘆 essere impostato su fluida(come sopra) o su Settable (default: 800px).
Lo sviluppatore pu嘆 cambiare laltezza delliframe attraverso alcune funzioni messe a
disposizione da Facebook quali:
- FB.Canvas.setSize()
- FB.Canvas.setAutoResize
Per approfondire si veda l How-To: Build an app on Facebook with Fluid Canvas


                                           Intesys Talk
Pagina
Autorizzazioni
Quando un utente accede alla nostra app, Facebook ci invia informazioni sullutente
Attraverso una richiesta HTTP POST alla nostra canvas, contenente un parametro
(signed_request) formato da un oggetto JSON encodato in base 64).
Al primo accesso, loggetto signed_request contiene solamente:
- user           : array composto dai dati sulla localizzazione ed et dellutente
- algorithm : stringa che descrive il meccanismo usato per il sign-in della richiesta
- issued_at : timestamp di quando 竪 stato creato il parametro signed_request
Per ottenere i permessi sullutente da parte dellapplicazione 竪 bene utilizzare il popup di
richiesta permessi (OAuth Dialog) attraverso il redirect (top.location.href dato che siamo in un
iframe) allurl:
https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_CANVAS_PAGE
che permetter allapplicazione di avere accesso ai permessi di base sullutente
(nome,sesso, immagine profilo,ecc).
Per ottenere altri permessi quali email, post dellutente, ecc. 竪 necessario modificare lurl
aggiungendo alcuni parametri, nella forma:
https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_CANVAS_PAGE&
scope=email,read_stream

Per tutte queste operazioni ci verr in aiuto lSDK ufficiale.

                                                    Intesys Talk
Pagina
Primo esempio
<?php
$app_id = "YOUR_APP_ID";

$canvas_page = "YOUR_CANVAS_PAGE_URL";

$auth_url = https://www.facebook.com/dialog/oauth?client_id=
        . $app_id . "&redirect_uri=" . urlencode($canvas_page);

$signed_request = $_REQUEST["signed_request"];

list($encoded_sig, $payload) = explode('.', $signed_request, 2);

$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);

if (empty($data["user_id"])) {
   echo("<script> top.location.href='" . $auth_url . /FMRiggio/sviluppare-applicazioni-facebook/"&</script>");
} else {
   echo ("Welcome User: " . $data["user_id"]);
}
?>
Semplice esempio di come autenticare lutente sulla nostra app.

                                    Intesys Talk
Pagina
SDKs
Facebook mette a disposizione degli sviluppatori vari tipi di kit di sviluppo tutti open-source.
Quelli che si utilizzano per lo sviluppo di applicazioni sono quelli Javascript e PHP.
Per lo sviluppo di applicazioni mobile Facebook mette a disposizione altri 2 SDK, uno per iOS e uno per
Android.

Javascript SDK
La versione Javascript mette a disposizione una serie di funzioni che effettuano le chiamate alle API
server-side per laccesso alle API Rest, alle Graph API e alle Dialogs. Inoltre aiuta nella generazione
del markup XFBML (linguaggio di markup proprietario) per i Social Plugins.

PHP SDK
Le funzionalit che va a ricoprire sono pressoch竪 identiche a quello Javascript (tranne le Dialogs).
La differenza nei tempi di caricamento dellapplicazione per嘆 竪 notevole. E disponibile su GitHub.

iOS SDK
Mette a disposizione una starting-class scritta ovviamente in Objective-C.
Le funzioni che supporta sono SSO, Graph API e le Dialogs.
Vale sia per iPhone che per iPad e iPod Touch. Reperibile sempre su GitHub.

Android SDK
Simile a quello per IOS anche a livello di funzioni offerte, anchesso disponibile su GitHub

                                                  Intesys Talk
Pagina
Javascript SDK
LSDK javascript viene caricato asincronamente tramite una funzione javascript, per via della velocit di
caricamento della pagina.
    <div id="fb-root"></div>
    <script>
      window.fbAsyncInit = function() {
         FB.init({
           appId      : 'YOUR_APP_ID', // App ID
           channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File
           status     : true, // check login status
           cookie     : true, // enable cookies to allow the server to access the session
           xfbml      : true // parse XFBML
         });
         // Additional initialization code here
      };
      // Load the SDK Asynchronously
      (function(d){
          var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
          js = d.createElement('script'); js.id = id; js.async = true;
          js.src = /FMRiggio/sviluppare-applicazioni-facebook/"/connect.facebook.net/en_US/all.js";
          d.getElementsByTagName('head')[0].appendChild(js);
       }(document));
    </script>
La funzione window.fbAsyncInit inizializza lSDK utilizzando le opzioni maggiormente usate.




                                                  Intesys Talk
Pagina
Channel File
Il channel file serve per risolve alcuni problemi cross-browser di caricamento dellSDK via
Javascript.
Deve puntare ad un URL che contenga solamente il tag:
    <script src=/FMRiggio/sviluppare-applicazioni-facebook/"/connect.facebook.net/en_US/all.js"></script>

e deve essere cachato :
    <?php
    $cache_expire = 60*60*24*365;
    header("Pragma: public");
    header("Cache-Control: max-age=".$cache_expire);
    header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$cache_expire) . ' GMT');
    ?>
    <script src=/FMRiggio/sviluppare-applicazioni-facebook/"/connect.facebook.net/en_US/all.js"></script>
E un parametro opzionale ma raccomandato dalla piattaforma stessa perch辿 risolve 3 problemi gi
conosciuti.
1. Pagine che contengono frame comunicanti non fanno funzionare correttamente i Social Plugins se
    non con il channel file.
2. Se la pagina contiene file audio o video con autoplay, lutente sentir 2 stream audio perch辿 la pagina
    viene ricaricata per permettere la comunicazione cross-domain.
3. Evita che le statistiche sballino.

Altra nota riguardo al cambiamento del document.domain via javascript, in quanto anche il channel file
deve avere lo stesso document.domain per poter funzionare.



                                                  Intesys Talk
Pagina
Autenticazione e Autorizzazione JS
Per ottenere i permessi ad accedere ai dati dellutente dobbiamo utilizzare la funzione
FB.login (Callback function, options):
    FB.login(function(response) {
    if (response.authResponse) {
         console.log('Welcome! Fetching your information.... ');
         FB.api('/me', function(response) {
           console.log('Good to see you, ' + response.name + '.');
           FB.logout(function(response) {
             console.log('Logged out.');
           });
         });
       } else {
         console.log('User cancelled login or did not fully authorize.');
       }
     }, {scope: 'email'});
Questa funzione non solo autentica lutente sulla nostra app, ma ci permette di chiedergli a quale delle
     sue
informazioni vogliamo accedere, tramite lopzione scope.

Questa funzione aprir il classico popup di facebook contenente la lista dei permessi che vogliamo
     ottenere
dallutente.
La procedura avviene tramite il protocollo OAuth, dal 13 Dicembre passato alla versione 2.0 .
Altre funzioni possibili sono: FB.logout, FB.getLoginStatus (asincrona  ci dice lo stato attuale dellutente)
     e
FB.getAuthResponse (sincrona  ci restituisce il record creato al momento dellautenticazione contenente
la signed_request, laccess_token e lID dellutente. Talk
                                                  Intesys
Pagina
Chiamate alle API
Accedere ai dati dellutente 竪 molto semplice, si utilizza la funzione FB.api(URL, callback function).

FB.api('/me', function(response) {
    alert('Your name is ' + response.name);
});


Si pu嘆 anche utilizzare FQL (Facebook Query Language) per eseguire query via REST.

FB.api(
   {
      method: 'fql.query',
      query: 'SELECT name FROM user WHERE uid=me()'
   },
   function(response) {
      alert('Your name is ' + response[0].name);
   }
);




                                                   Intesys Talk
Pagina
PHP SDK
LSDK PHP mette a disposizione una serie di funzionalit per accedere alle API server-side.
E scaricabile da GitHub(https://github.com/facebook/php-sdk).

Spesso usato per operazioni di gestione del profilo (modifiche alle foto, video, ecc.) , elimina la necessit
    di
gestire manualmente lautorizzazione degli access_token.

Per prima cosa si dovr inizializzare lSDK per mezzo dei dati ottenuti durante la creazione dellapp.




                                                  Intesys Talk
Pagina
Installazione e inizializzazione
Una volta scaricato il file zip contenente lSDK da GitHub, si devono copiare i file della cartella
src allinterno della cartella che ospiter tutta lapp.
Successivamente si istanzia loggetto Facebook con i 2 dati principali ricavati al momento della creazione
(app_id e app_secret).

require_once("facebook.php");

$config = array();
$config[appId] = 'YOUR_APP_ID';
$config[secret] = 'YOUR_APP_SECRET';
$config[fileUpload] = false; // optional

$facebook = new Facebook($config);


Lopzione fileUpload autorizza o meno lSDK ad effettuare lupload di file sul proprio server.
Ovviamente dovr essere attiva questa configurazione anche sul server.




                                                  Intesys Talk
Pagina
Autenticazione e autorizzazione
Per effettuare le operazioni di autenticazione ed autorizzazione, l'SDK PHP mette a disposizione alcuni
metodi statici:

Login
$params = array(
   'scope' => 'read_stream, friends_likes',
   'redirect_uri' => 'https://www.myapp.com/post_login_page'
);
$loginUrl = Facebook::getLoginUrl($params);

Logout
$params = array( 'next' => 'https://www.myapp.com/after_logout' );
$logoutUrl = Facebook::getLogoutUrl($params);

Retrieve User
$uid = Facebook::getUser();




                                                 Intesys Talk
Pagina
Chiamate alle API
Per effettuare una chiamata alle API ed avere accesso ai dati dell'utente ci viene in soccorso il metodo
Statico: Facebook::api(/* Polymorphic*/)

Un breve esempio:
<?php
// [] Installazione e inizializzazione SDK
$user_id = $facebook->getUser();
if($user_id) {
   try {
      $user_profile = $facebook->api('/me','GET');
      echo "Name: " . $user_profile['name'];
   } catch(FacebookApiException $e) {
      $login_url = $facebook->getLoginUrl();
      echo 'Please <a href=/FMRiggio/sviluppare-applicazioni-facebook/"& . $login_url . '">login.</a>';
      error_log($e->getType());error_log($e->getMessage());
   }
} else {
   $login_url = $facebook->getLoginUrl();
   echo 'Please <a href=/FMRiggio/sviluppare-applicazioni-facebook/"& . $login_url . '">login.</a>';
}
?>

                                                 Intesys Talk
Pagina
Tools

- Access Token Tool
- Test Users
- Platform Status
- Debugger
- Graph API Explorer
- Javascript Test Console




                            Intesys Talk
Pagina
Access Token Tool
E' un utile strumento per ottenere gli access_token dalle applicazioni che si sono create ed avere
informazioni utili sulle proprie apps.




                                                 Intesys Talk
Pagina
Test Users
 Facebook mette a disposizione la possibilit di impostare alcuni utenti come tester dell'applicazione.
 Si possono usare utenti esistenti ed aggiungerli tramite il pannello di gestione dell'app, nella sezione
 Edit Roles oppure esiste la possibilit di crearne di nuovi solo per la fase di testing attraverso
 le Graph API.


 https://graph.facebook.com/APP_ID/accounts/test-users?
    installed=true
    &name=FULL_NAME
    &permissions=read_stream
    &method=post
    &access_token=APP_ACCESS_TOKEN


 (*) installed : imposta se l'utente di test ha gi installato l'app oppure no



                                                      Intesys Talk
Pagina
Platform Status
Facebook mette a disposizione una pagina pubblica in cui 竪 possibile vedere lo stato aggiornato in tempo
reale di tutta la piattaforma.




                                                Intesys Talk
Pagina
Debugger
Un altro utile strumento 竪 il debugger, una pagina che presenta un campo di test in cui inserire le pagine
contenente i metatag per opengraph, oppure il link per il Like Button o per i Social Plugins.




                                                  Intesys Talk
Pagina
Graph API Explorer
Lo strumento pi湛 utile di tutta la suite messa a disposizione da Facebook 竪 il Graph API Explorer.
Permette di fare tutti i test del caso con le API per andare a capire quale API andare ad utilizzare.




                                                  Intesys Talk
Pagina
Javascript Test Console
La Javascript Test Console 竪 un tool che permette di andare a testare tutte le funzionalit dell'SDK
Javascript. Sono presenti gi molti esempi di codice da lanciare per vedere il funzionamento dell'SDK.




                                                 Intesys Talk
Pagina
Funzionalit avanzate

- FQL
- Dialogs
- Credits
- I18N
- Chat API




                   Intesys Talk
Pagina
Facebook Query Language (FQL)
FQL 竪 un linguaggio, molto simile a SQL, creato da Facebook per interrogare la vaste base dati in
maniera facile.
Ad esempio la query: SELECT uid FROM user WHERE is_app_user = 1 AND uid IN (SELECT uid FROM
friend WHERE uid1 = $app_user)ritorna tutti gli id degli utenti amici dell'utente che sta utilizzando
l'app.
Un altro esempio per recuperare nome,cognome e avatar dell'utente che sta usando l'app.
function getQuery() {
    FB.api('/me', function(response){
      var query = FB.Data.query('select name, hometown_location, sex, pic_square from user where
      uid={0}', response.id);
      query.wait(function(rows) {
          $('#fql-data').html('Il tuo nome:' + rows[0].name + "<br/>" +'<img src=/FMRiggio/sviluppare-applicazioni-facebook/"& +
          rows[0].pic_square + '" alt=""/>' + "<br/>");
      });
    });
}
La chiamata si divide in 2 fasi:
1 - l'esecuzione della query
2 - l'attesa dei risultati tramite query.wait() che poi popola un div html.
FQL 竪 molto utile perch竪 permette di utilizzare funzionalit avanzate che con le Graph API sarebbero
impossibili, ad esempio inserire chiamate multiple in una singola chiamata.
Per approfondire si rimanda alla documentazione ufficiale:
http://developers.facebook.com/docs/reference/fql/
                                                Intesys Talk
Pagina
Dialogs
I popup tipici di Facebook(dialogs) mantengono la grafica di facebook senza necessitare di permessi
degli utenti per essere usati, in quanto i popup stessi necessitano dell'interazione dell'utente
al suo interno.


Possono essere usati in qualsiasi tipo di applicazione, su Facebook, su un sito o su un app mobile.


Si possono utilizzare tramite la costruzione di un URL o utilizzando uno degli helper dei vari SDK.


Ogni dialog 竪 si compone di un metodo ed alcuni parametri.
L'URL inizia con "http://www.facebook.com/dialog", seguito dal metodo e dai parametri.


Ad esempio il popup per inserire un post sulla propria bacheca.
 http://www.facebook.com/dialog/feed?
  app_id=123456789101112&
  redirect_uri=http://www.example.com/response/




                                                   Intesys Talk
Pagina
Facebook Credits
Facebook credits 竪 un sistema di pagamento che permette agli sviluppatori di applicazioni Facebook di
guadagnare in maniera semplice e veloce.


Utilizzare Facebook Credits 竪 utile perch竪:
- gli utenti sono gi fidelizzati con Facebook e si fidano ad effettuare pagamenti per mezzo della
 piattaforma
- Facebook supporta pi湛 di 80 metodi di pagamento in 50 paesi ed 竪 in continua espansione


I vari flussi di pagamento vengono effettuati attraverso un set di API messe a disposizione della piattaforma.
Un esempio di come questo metodo di guadagno 竪 stato vantaggioso 竪 Farmville.
Gioco in flash che conta circa 29 milioni di utenti attivi ed un sistema di pagamento effettuato tramite
Facebook Credits e Paypal.
Poi quotata in borsa (la prima azienda ad essere quotata in borsa per la vendita
di beni virtuali) 竪 arrivata ad essere valutata circa 5 miliardi di dollari.


Ovviamente Facebook offrendo il bacino di utenti pi湛 grande del mondo vuole anche qualcosa in cambio, si
parla di circa il 30% delle transazioni effettuate tramite la piattaforma.


                                                      Intesys Talk
Pagina
Internazionalization
Facebook 竪 disponibile in pi湛 di 70 lingue grazie ad un particolare framework che permette alla comunit
stessa di tradurre le etichette.
L'elenco di tutte le lingue disponibili si trova all'interno di un file XML
(http://www.facebook.com/translations/FacebookLocales.xml).
Le lingue sono codificate tramite i codici standard ISO e il codice del paese separate da un'underscore
(it_IT, en_US).
Per determinare la lingua da utilizzare pi湛 opportunamente, basta esaminare la signed_request di un utente
     e
andare ad interpretare il valore della variabile locale.


Le varie localizzazioni vengono fatte attraverso lSDK Javascript, al momento dellinclusione:
//connect.facebook.com/it_IT/all.js


Facebook mette a disposizione un app, per effettuare il translating della propria seguendo alcuni semplici
passi descritti qui: https://developers.facebook.com/docs/internationalization/




                                                      Intesys Talk
Pagina
Chat API
Una cosa molto utile che ha fatto Facebook 竪 stato di mettere a disposizione le API della chat per dare la
possibilit di integrare un sistema di instant-messaging sul proprio sito/app.
Le API si basano sugli standard XMPP (Extensible Messagging Presence Protocol).
Sono molto semplici da implementare, e la documentazione 竪 molto ricca
(https://developers.facebook.com/docs/chat/), intanto un breve elenco di funzionalit e limitazioni.


Funzionalit messe a disposizione:
-     Autenticazione sulla piattaforma tramite SASL (Simple Authentication and Security Layer)
-     Autenticazione dell utente tramite Username/Password con Digest-MD5
-     Messaggi inviati e ricevuti in plain-text
-     Invio delle notifiche di stato (sto scrivendo, online, offline) sullo standard XEP-0085 (sempre XMPP)
-     Ricezione di vCard sullo standard XEP-0054 (semper XMPP)
-     Ricezione delle foto dagli amici
Limitazioni imposte:
-     non si inviano/ricevono messaggi in HTML
-     La rimozione degli utenti dalla chat-room non avviene secondo gli standard XMPP
-     Non c 竪 nessun controllo sui messaggi inviati (parolacce, insulti, ecc.)
-     Altre funzionalit che non rispettono gli standard XMPP



                                                                  Intesys Talk
Pagina
Fonti
Potete trovare altro materiale relativo allo sviluppo di applicazioni Facebook:


Online
-    Documentazione ufficiale (https://developers.facebook.com/docs/)
-    BigThink (http://www.bigthink.it/)


Cartaceo
-    IoProgrammo (ne parla in svariati numeri)
-    Creare applicazioni per Facebook (
     http://www.hoepli.it/libro/creare-applicazioni-per-facebook/9788882339920.asp)


Prossimamente online sul mio blog:
-    www.good2know.it




                                                        Intesys Talk
Pagina
Do You Have
           Any Questions?

                          Filippo Riggio
                          Developer
                          filippo.riggio@intesys.it




           Intesys Talk
Pagina

More Related Content

Sviluppare applicazioni Facebook

  • 1. Intesys Talk Sviluppare applicazioni Facebook Intesys, 11/07/2011
  • 2. Sommario 1. Introduzione 4. In pratica 5. Tools 2. Risorse principali 1. Creare lapp 1. Access Token Tool 1. Canvas Page 2. Configurazione 2. Test Users 3. Il canvas 3. Platform Status 2. Social Channels 3. Insights 4. Autorizzazioni 4. Debugger 5. Esempio 5. Graph API 3. Concetti chiave della 6. SDKs Explorer piattaforma 1. Javascript SDK 6. Javascript Test 1. Social Graph 1. Channel File 2. Autenticazione e Console 2. Open Graph Autorizzazione 5. Funzionalit avanzate 3. Graph API 3. Chiamate alle API 1. FQL 4. OAuth 2. PHP SDK 2. Dialogs 5. Authentication 1. Installazione e 1. Server-side Flow Inizializzazione 3. Credits 2. Autenticazione e 2. Client-side Flow Autorizzazione 4. I18N 3. Chiamata alle 5. Chat API API 5. Fonti e ringraziamenti Intesys Talk Pagina
  • 3. Perch辿 sviluppare applicazioni Facebook? E utile sviluppare applicazioni Facebook perch竪 permette di creare un canale social tra il brand per cui lavoriamo e gli utenti finali. Intesys Talk Pagina
  • 4. Le 3 risorse principali Strumenti messi a disposizione da Facebook - Canvas Page - Social Channels - Insights Intesys Talk Pagina
  • 5. Canvas Page Le applicazioni FB sono web app liberamente realizzabili con i comuni linguaggi orientati allo sviluppo web (php, python,Java, C#,ecc). La canvas 竪 molto simile ad un iframe allinterno del quale viene caricata la nostra app. La canvas viene popolata attraverso una Canvas URL sulla quale risieder la nostra app. Quando un utente visita la nostra app, FB caricher tramite iframe il contenuto della nostra Canvas URL. Lo spazio a disposizione allinterno della Canvas 竪 di default di 760px ma pu嘆 essere fluido (dal Novembre 2011) ed occupare tutta la larghezza del browser. Intesys Talk Pagina
  • 6. Social Channels Per portare pi湛 traffico possibile verso la propria app, Facebook mette a disposizione alcuni canali quali : Bookmarks Aggiunti in automatico sulla pagina dellutente una volta che ha utilizzato lapp; permettono facilmente di far tornare lutente Notifiche Permettono a pi湛 utenti di ricevere notifiche riguardanti inviti ad utilizzare lapp; ne esistono di 2 tipi: user generated : richieste tramite popup allutente che decide se inviarle o meno agli amici app generated : inviate in automatico dallapp agli utenti che ne hanno espresso il consenso nei permessi (si vedr dopo come richiedere i permessi) News feed Vengono creati in automatico da Facebook nella parte in alto a destra dellhomepage mentre possono essere pubblicati come post sempre dietro consenso esplicito dellutente. Intesys Talk Pagina
  • 7. Insights Insights 竪 uno strumento messo a disposizione da Facebook per trackare e quindi poter analizzare gli utenti, lo sharing fatto in relazione allapplicazione, le performance dellapplicazione, ecc. Intesys Talk Pagina
  • 8. Concetti chiave Prima di procedere con la creazione di un applicazione bisogna andare a capire com'竪 stato strutturato e concepito il social network. - Social Graph - Open Graph - Graph API - Authentication Intesys Talk Pagina
  • 9. Social Graph Tutti i dati presenti all'interno di Facebook sono rappresentati come entit di un immenso grafo(*) dotato di identificato univoco (FB id). Ad esempio, l'utente Mario Rossi con i suoi dati 竪 un nodo del grafo, da questo nodo partono connessioni verso altri nodi : gli amici di Mario, le sue foto,ecc. Tutto l'insieme dei milioni e milioni di utenti di Facebook forma il grafo dell'intero social network, che si potr scandagliare per mezzo delle Graph API. (*) Grafo: struttura matematica costituita da un insieme di nodi collegati fra loro. Date le molte propriet, vengono studiati sia in matematica che in informatica. (http://it.wikipedia.org/wiki/Grafo) Intesys Talk Pagina
  • 10. Open Graph Protocol LOGP 竪 un protocollo creato da Facebook nel 2008 (evolutosi fino ad oggi vedi la timeline), che trasforma qualsiasi pagina web in un entit associabile al grafo sociale di unutente. Le pagine web che contengono il Like Button di Facebook vengono viste dalla piattaforma come pagine Facebook e quindi entit del grafo complessivo del social network. Come nellesempio qui sotto, lutente clicca sul mi piace di una pagina di un film ed in automatico viene creata la connessione tra lentit (la pagina Facebook del film) e lutente. Intesys Talk Pagina
  • 11. Modifiche a Open Graph Protocol Dal settembre 2011, dopo la conferenza F8, che ha introdotto Timeline, all'interno di OGP sono state incluse le attivit e gli oggetti (per ora solo applicazioni) che si integrano in profondit con il social network. Un breve esempio. Creiamo un'applicazione che fornisce ricette, durante la configurazione dell'app si pu嘆 impostare che tipo di attivit l'utente svolger (in questo caso cucinare). Quando l'utente aggiunger l'app alla sua timeline, le attivit specificate durante la configurazione verranno condivise sul news feed, sul ticker (l'area in alto a destra) e sulla propria timeline. Intesys Talk Pagina
  • 12. Graph API Il cuore della programmazione Facebook 竪 costituito dalle Graph API, collezione di semplici servizi Web utili per navigare il grafo sociale. Un semplice esempio. Collegandosi all'indirizzo https://graph.facebook.com/platform, vedremo apparire una serie di informazioni relative all'id (in questo caso l'alias) dell'utente inserito. Come detto prima, ogni entit del grafo ha un suo identificativo (numerico o alias) che pu嘆 essere usato per recuperare i dati sull'entit, qualora ne avessimo i permessi. Ogni entit ha i suoi dati, in quanto, ovviamente, un album di foto avr campi diversi dal profilo di un utente. Per vedere quali campi si possono estrarre da ogni entit ci viene incontro la documentazione ufficiale: http://developers.facebook.com/docs/reference/api/ Altro tool molto utile 竪 il Graph API Explorer, che ci aiuta notevolmente nello sviluppo delle apps: https://developers.facebook.com/tools/explorer?method=GET&path=19292868552 L'impiego delle API verr spiegato a breve, dopo la creazione e configurazione delle nostre apps. Intesys Talk Pagina
  • 13. Il protocollo OAuth Si aveva la necessit di autenticare applicazioni di terze parti su sistemi esterni per dare la possibilit a queste applicazioni di accedere alle API del sistema esterno. OAuth 竪 un protocollo open, conforme alla metodologia RESTful, quindi facilmente applicabile da tutte quelle applicazioni scritte con linguaggi capacia di aprire socket. I principi fondamentali sono 2 (riportati dal sito ufficiale): - 竪 un metodo facile per interagire con dati protetti, 竪 un metodo sicuro con cui gli utenti forniscono gli accessi. - se si interagisce con i dati degli utenti si consiglia Oauth, perch辿 permette di accedere ai dati degli utenti senza conoscerne le credenziali. In poche parole, lutente autorizzer嘆 unapplicazione ad accedere ai suoi dati presso il sistema esterno senza che lapplicazione conosca le credenziali dellutente. Lo utilizzano quasi tutti i big del web, come Facebook, Twitter, Yahoo!,Google,ecc. Di seguito spiegher嘆 il flusso di autenticazione. Intesys Talk Pagina
  • 14. Il protocollo OAuth Fase preliminare: lo sviluppatore dellApplicazione deve registrare questultima sul Servizio Esterno, indicando quali dati potranno essere recuperati. 1 - L utente accede allapplicazione,(2) che contatta il sistema esterno per ricevere un Unauthorized Request Token(3); 4 - Lapplicazione ridirige l utente verso il sistema esterno, passando il token non autorizzato; 5 - L utente decide di autorizzare lapplicazione direttamente sul sistema esterno; 6 - Il sistema esterno ridirige lutente verso lapplicazione passando un Access Token(7); Lapplicazione accede ai dati dellUtente presenti sul sistema esterno grazie al token autorizzato. Intesys Talk Pagina
  • 15. Differenze tra OAuth 1.0 e OAuth 2.0 Allinizio del Maggio 2010, il gruppo di lavoro di OAuth ha rilasciato la bozza della seconda versione. Le novit rispetto alla versione precedente riguardano: - 6 nuovi flussi di autenticazione (user-agent flow,web server flow, device flow, ecc.) per le applicazioni che non prevedono browser - Lapplicazione client non necessit per forza di meccanismi di crittografia, ma si utilizza una connessione via https per lautenticazione (basato sulle API di Twitter, poi implementato anche da facebook) - Autenticazione meno complicata - I token forniti con OAuth 2.0 hanno un tempo di expires breve - Netta separazione dei ruoli tra il server responsabile della gestione delle richieste OAuth e il server che gestisce lautorizzazione dellutente. Intesys Talk Pagina
  • 16. Facebook Authentication Facebook utilizza il protocollo OAuth 2.0 per l'autenticazione e l'autorizzazione. Supporta diversi flussi per l'autenticazione da integrare con il proprio sito o la propria app, mobile o desktop che sia. User Login Facebook supporta 2 tipi diversi di flusso per il login dell'utente. - server-side, noto come flusso con codice di autenticazione - client-side, noto come flusso implicito Quello server-side viene usato per fare una chiamata alle Graph API dal nostro web server, quello client-side per effettuare le chiamate tramite javascript su browser o da applicazioni mobile o desktop. Indipendentemente dal tipo di flusso scelto, l'implementazione di Facebook dei flussi prevede 3 step: - user authentication, verifica che l'utente 竪 quello che dice di essere - app authorization, verifica che l'utente conosce quali permessi l'applicazione avr sui suoi dati - app authentication, verifica che l'utente sta fornendo le sue informazioni e non quelle di altri Una volta completati tutti questi step, all'app viene fornito uno user access token, che permette all'app di accedere alle informazioni dell'utente. Intesys Talk Pagina
  • 17. Server-side Flow L'autenticazione dell'utente e l'autorizzazione dell'app vengono effettuate contemporaneamente attraverso il popup OAuth. Quando si richiama questo popup si devono passare i parametri app_id (generata al momento di creazione dell'app) e l'URI di ritorno a cui il browser punter dopo l'autorizzazione dell'app (*). https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL (*) Il parametro redirect_uri deve ovviamente far parte del dominio su cui risiede l'app. Se l'utente 竪 gi loggato, il popup valida il cookie di login salvato sul browser dell'utente, altrimenti vengono mostrati i campi di login. Una volta autenticato l'utente viene mostrata la lista di permessi che l'applicazione richiede all'utente. Di default l'app ha accesso alle informazioni pubbliche dell'utente. Per richiedere informazioni aggiuntive, come foto, note, link, ecc., si deve aggiungere un altro parametro all'url, cio竪 scope. Nel parametro scope vanno specificati i permessi da richiedere all'utente. https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&scope=email,read_stream Per la lista di tutti i permessi si guardi la reference: http://developers.facebook.com/docs/reference/api/permissions/ NB: Facebook ha verificato una proporzionalit inversa tra il numero di permessi richiesti ed il numero di utenti. Intesys Talk Pagina
  • 18. Server-side Flow Se l'utente non garantisce i permessi l'OAuth Dialog redireziona(via HTTP 302) all'URI passato come parametro con alcuni parametri aggiuntivi: http://YOUR_URL? error_reason=user_denied& error=access_denied& error_description=The+user+denied+your+request. Se l'utente garantisce i permessi l'OAuth Dialog redireziona, come nel precedente, all'URI specificato aggiungendo per嘆 il parametro code : http://YOUR_URL?code=A_CODE_GENERATED_BY_SERVER Avendo il parametro code in mano si pu嘆 procedere allo step finale, cio竪 l'app authentication, per ottenere l'access token da utilizzare per le chiamate API. Per farlo si devono passare all'URL https://graph.facebook.com/oauth/access_token questi parametri: - client_id=YOUR_APP_ID : parametro generato alla creazione dell'app - redirect_uri=YOUR_URL : come nello step precedente, 竪 un URI che risiede sul nostro dominio, su cui atterreremo una volta autorizzata l'app - client_secret=YOUR_APP_SECRET : parametro generato alla creazione dell'app - code=THE_CODE_FROM_ABOVE : il codice ottenuto appena prima quindi https://graph.facebook.com/oauth/access_token? client_id=YOUR_APP_ID& redirect_uri=YOUR_URL& client_secret=YOUR_APP_SECRET& code=THE_CODE_FROM_ABOVE Intesys Talk Pagina
  • 19. Server-side Flow Una volta autorizzata l'app, il server ci restituir l'access token. Insieme all'access token avremo anche il parametro expires, contenente il numero di secondi prima che il token scada. Ovviamente se il token scade, si dovranno rifare tutti quanti i passaggi precedenti. NB: per avere un access_token che non scada mai, bisogna richiedere come permesso quello di offline_access, permesso che per嘆 viene molto spesso negato dagli utenti. Nel caso di un errore nell'autorizzazione dell'app, il server ci restituir l'errore HTTP 400, contenente nel response tipo e messaggio di errore. Intesys Talk Pagina
  • 20. Client-side Flow La versione client-side usa anch'essa OAuthDialog ma con un parametro aggiuntivo che 竪 il response_type. https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&response_type=token Anche qui, per i permessi aggiuntivi, si usa il parametro scope=permessi_da_richiedere. Una volta che lutente 竪 autenticato ed ha autorizzato lapp, il browser reindirizza al redirect_uri, per嘆 anzich辿 passare il parametro code, passa laccess_token allinterno di un frammento dellURI (#access_token). Dato che laccess_token 竪 passato tramite frammento dellURI, solo codice client-side potr estrapolarlo. Intesys Talk Pagina
  • 21. Creare lapp Se non si sono mai create applicazioni, bisogna visitare la Developer app, che ci autorizza a creare applicazioni. Per creare un app poi verr verificato laccount dello sviluppatore attraverso la conferma del numero di telefono o della carta di credito. Intesys Talk Pagina
  • 22. Configurare lapp 1. Cliccando su +Crea Applicazione, avremo questo popup in cui specificare nome dellapplicazione e namespace (vedremo dopo a cosa servir). 2. Il passo successivo prevede linserimento di un CAPTCHA fino ad arrivare al pannello di gestione dellapplicazione (figura 2). 3. Arrivati a questo punto Facebook avr generato: App ID e App Secret, dopo aver finito di compilare i campi Contact Email e Category andiamo ad inserire i campi Canvas URL e Secure Canvas URL(*) con il nostro dominio sulla quale risiede lapp. La nostra app dovr risiedere o sulla document root o su una sottocartella del dominio. Ad esempio: https://www.gardaland.it/facebook/TabRaptorCountdown/ (*) Dal 1属 Ottobre 2011 tutte le applicazioni su Facebook dovranno essere su domini con certificato HTTPS, mentre la fase di testing si pu嘆 fare con il dominio senza certificato. Intesys Talk Pagina
  • 23. Dimensioni del Canvas La nostra app viene comunque caricata allinterno di Facebook, quindi ci sono imposizioni da parte della piattaforma sulle dimensioni. Canvas width La larghezza della nostra app pu嘆 essere impostata su fissa a 760px o su fluida. Nel qual caso la larghezza fosse fluida liframe che contiene lapp avr width al 100%. Se il nostro contenuto sfora la larghezza massima verr mostrata la scrollbar sotto o tagliato parte del contenuto. Canvas height Laltezza del canvas pu嘆 essere impostato su fluida(come sopra) o su Settable (default: 800px). Lo sviluppatore pu嘆 cambiare laltezza delliframe attraverso alcune funzioni messe a disposizione da Facebook quali: - FB.Canvas.setSize() - FB.Canvas.setAutoResize Per approfondire si veda l How-To: Build an app on Facebook with Fluid Canvas Intesys Talk Pagina
  • 24. Autorizzazioni Quando un utente accede alla nostra app, Facebook ci invia informazioni sullutente Attraverso una richiesta HTTP POST alla nostra canvas, contenente un parametro (signed_request) formato da un oggetto JSON encodato in base 64). Al primo accesso, loggetto signed_request contiene solamente: - user : array composto dai dati sulla localizzazione ed et dellutente - algorithm : stringa che descrive il meccanismo usato per il sign-in della richiesta - issued_at : timestamp di quando 竪 stato creato il parametro signed_request Per ottenere i permessi sullutente da parte dellapplicazione 竪 bene utilizzare il popup di richiesta permessi (OAuth Dialog) attraverso il redirect (top.location.href dato che siamo in un iframe) allurl: https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_CANVAS_PAGE che permetter allapplicazione di avere accesso ai permessi di base sullutente (nome,sesso, immagine profilo,ecc). Per ottenere altri permessi quali email, post dellutente, ecc. 竪 necessario modificare lurl aggiungendo alcuni parametri, nella forma: https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_CANVAS_PAGE& scope=email,read_stream Per tutte queste operazioni ci verr in aiuto lSDK ufficiale. Intesys Talk Pagina
  • 25. Primo esempio <?php $app_id = "YOUR_APP_ID"; $canvas_page = "YOUR_CANVAS_PAGE_URL"; $auth_url = https://www.facebook.com/dialog/oauth?client_id= . $app_id . "&redirect_uri=" . urlencode($canvas_page); $signed_request = $_REQUEST["signed_request"]; list($encoded_sig, $payload) = explode('.', $signed_request, 2); $data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true); if (empty($data["user_id"])) { echo("<script> top.location.href='" . $auth_url . /FMRiggio/sviluppare-applicazioni-facebook/"&</script>"); } else { echo ("Welcome User: " . $data["user_id"]); } ?> Semplice esempio di come autenticare lutente sulla nostra app. Intesys Talk Pagina
  • 26. SDKs Facebook mette a disposizione degli sviluppatori vari tipi di kit di sviluppo tutti open-source. Quelli che si utilizzano per lo sviluppo di applicazioni sono quelli Javascript e PHP. Per lo sviluppo di applicazioni mobile Facebook mette a disposizione altri 2 SDK, uno per iOS e uno per Android. Javascript SDK La versione Javascript mette a disposizione una serie di funzioni che effettuano le chiamate alle API server-side per laccesso alle API Rest, alle Graph API e alle Dialogs. Inoltre aiuta nella generazione del markup XFBML (linguaggio di markup proprietario) per i Social Plugins. PHP SDK Le funzionalit che va a ricoprire sono pressoch竪 identiche a quello Javascript (tranne le Dialogs). La differenza nei tempi di caricamento dellapplicazione per嘆 竪 notevole. E disponibile su GitHub. iOS SDK Mette a disposizione una starting-class scritta ovviamente in Objective-C. Le funzioni che supporta sono SSO, Graph API e le Dialogs. Vale sia per iPhone che per iPad e iPod Touch. Reperibile sempre su GitHub. Android SDK Simile a quello per IOS anche a livello di funzioni offerte, anchesso disponibile su GitHub Intesys Talk Pagina
  • 27. Javascript SDK LSDK javascript viene caricato asincronamente tramite una funzione javascript, per via della velocit di caricamento della pagina. <div id="fb-root"></div> <script> window.fbAsyncInit = function() { FB.init({ appId : 'YOUR_APP_ID', // App ID channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File status : true, // check login status cookie : true, // enable cookies to allow the server to access the session xfbml : true // parse XFBML }); // Additional initialization code here }; // Load the SDK Asynchronously (function(d){ var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;} js = d.createElement('script'); js.id = id; js.async = true; js.src = /FMRiggio/sviluppare-applicazioni-facebook/"/connect.facebook.net/en_US/all.js"; d.getElementsByTagName('head')[0].appendChild(js); }(document)); </script> La funzione window.fbAsyncInit inizializza lSDK utilizzando le opzioni maggiormente usate. Intesys Talk Pagina
  • 28. Channel File Il channel file serve per risolve alcuni problemi cross-browser di caricamento dellSDK via Javascript. Deve puntare ad un URL che contenga solamente il tag: <script src=/FMRiggio/sviluppare-applicazioni-facebook/"/connect.facebook.net/en_US/all.js"></script> e deve essere cachato : <?php $cache_expire = 60*60*24*365; header("Pragma: public"); header("Cache-Control: max-age=".$cache_expire); header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$cache_expire) . ' GMT'); ?> <script src=/FMRiggio/sviluppare-applicazioni-facebook/"/connect.facebook.net/en_US/all.js"></script> E un parametro opzionale ma raccomandato dalla piattaforma stessa perch辿 risolve 3 problemi gi conosciuti. 1. Pagine che contengono frame comunicanti non fanno funzionare correttamente i Social Plugins se non con il channel file. 2. Se la pagina contiene file audio o video con autoplay, lutente sentir 2 stream audio perch辿 la pagina viene ricaricata per permettere la comunicazione cross-domain. 3. Evita che le statistiche sballino. Altra nota riguardo al cambiamento del document.domain via javascript, in quanto anche il channel file deve avere lo stesso document.domain per poter funzionare. Intesys Talk Pagina
  • 29. Autenticazione e Autorizzazione JS Per ottenere i permessi ad accedere ai dati dellutente dobbiamo utilizzare la funzione FB.login (Callback function, options): FB.login(function(response) { if (response.authResponse) { console.log('Welcome! Fetching your information.... '); FB.api('/me', function(response) { console.log('Good to see you, ' + response.name + '.'); FB.logout(function(response) { console.log('Logged out.'); }); }); } else { console.log('User cancelled login or did not fully authorize.'); } }, {scope: 'email'}); Questa funzione non solo autentica lutente sulla nostra app, ma ci permette di chiedergli a quale delle sue informazioni vogliamo accedere, tramite lopzione scope. Questa funzione aprir il classico popup di facebook contenente la lista dei permessi che vogliamo ottenere dallutente. La procedura avviene tramite il protocollo OAuth, dal 13 Dicembre passato alla versione 2.0 . Altre funzioni possibili sono: FB.logout, FB.getLoginStatus (asincrona ci dice lo stato attuale dellutente) e FB.getAuthResponse (sincrona ci restituisce il record creato al momento dellautenticazione contenente la signed_request, laccess_token e lID dellutente. Talk Intesys Pagina
  • 30. Chiamate alle API Accedere ai dati dellutente 竪 molto semplice, si utilizza la funzione FB.api(URL, callback function). FB.api('/me', function(response) { alert('Your name is ' + response.name); }); Si pu嘆 anche utilizzare FQL (Facebook Query Language) per eseguire query via REST. FB.api( { method: 'fql.query', query: 'SELECT name FROM user WHERE uid=me()' }, function(response) { alert('Your name is ' + response[0].name); } ); Intesys Talk Pagina
  • 31. PHP SDK LSDK PHP mette a disposizione una serie di funzionalit per accedere alle API server-side. E scaricabile da GitHub(https://github.com/facebook/php-sdk). Spesso usato per operazioni di gestione del profilo (modifiche alle foto, video, ecc.) , elimina la necessit di gestire manualmente lautorizzazione degli access_token. Per prima cosa si dovr inizializzare lSDK per mezzo dei dati ottenuti durante la creazione dellapp. Intesys Talk Pagina
  • 32. Installazione e inizializzazione Una volta scaricato il file zip contenente lSDK da GitHub, si devono copiare i file della cartella src allinterno della cartella che ospiter tutta lapp. Successivamente si istanzia loggetto Facebook con i 2 dati principali ricavati al momento della creazione (app_id e app_secret). require_once("facebook.php"); $config = array(); $config[appId] = 'YOUR_APP_ID'; $config[secret] = 'YOUR_APP_SECRET'; $config[fileUpload] = false; // optional $facebook = new Facebook($config); Lopzione fileUpload autorizza o meno lSDK ad effettuare lupload di file sul proprio server. Ovviamente dovr essere attiva questa configurazione anche sul server. Intesys Talk Pagina
  • 33. Autenticazione e autorizzazione Per effettuare le operazioni di autenticazione ed autorizzazione, l'SDK PHP mette a disposizione alcuni metodi statici: Login $params = array( 'scope' => 'read_stream, friends_likes', 'redirect_uri' => 'https://www.myapp.com/post_login_page' ); $loginUrl = Facebook::getLoginUrl($params); Logout $params = array( 'next' => 'https://www.myapp.com/after_logout' ); $logoutUrl = Facebook::getLogoutUrl($params); Retrieve User $uid = Facebook::getUser(); Intesys Talk Pagina
  • 34. Chiamate alle API Per effettuare una chiamata alle API ed avere accesso ai dati dell'utente ci viene in soccorso il metodo Statico: Facebook::api(/* Polymorphic*/) Un breve esempio: <?php // [] Installazione e inizializzazione SDK $user_id = $facebook->getUser(); if($user_id) { try { $user_profile = $facebook->api('/me','GET'); echo "Name: " . $user_profile['name']; } catch(FacebookApiException $e) { $login_url = $facebook->getLoginUrl(); echo 'Please <a href=/FMRiggio/sviluppare-applicazioni-facebook/"& . $login_url . '">login.</a>'; error_log($e->getType());error_log($e->getMessage()); } } else { $login_url = $facebook->getLoginUrl(); echo 'Please <a href=/FMRiggio/sviluppare-applicazioni-facebook/"& . $login_url . '">login.</a>'; } ?> Intesys Talk Pagina
  • 35. Tools - Access Token Tool - Test Users - Platform Status - Debugger - Graph API Explorer - Javascript Test Console Intesys Talk Pagina
  • 36. Access Token Tool E' un utile strumento per ottenere gli access_token dalle applicazioni che si sono create ed avere informazioni utili sulle proprie apps. Intesys Talk Pagina
  • 37. Test Users Facebook mette a disposizione la possibilit di impostare alcuni utenti come tester dell'applicazione. Si possono usare utenti esistenti ed aggiungerli tramite il pannello di gestione dell'app, nella sezione Edit Roles oppure esiste la possibilit di crearne di nuovi solo per la fase di testing attraverso le Graph API. https://graph.facebook.com/APP_ID/accounts/test-users? installed=true &name=FULL_NAME &permissions=read_stream &method=post &access_token=APP_ACCESS_TOKEN (*) installed : imposta se l'utente di test ha gi installato l'app oppure no Intesys Talk Pagina
  • 38. Platform Status Facebook mette a disposizione una pagina pubblica in cui 竪 possibile vedere lo stato aggiornato in tempo reale di tutta la piattaforma. Intesys Talk Pagina
  • 39. Debugger Un altro utile strumento 竪 il debugger, una pagina che presenta un campo di test in cui inserire le pagine contenente i metatag per opengraph, oppure il link per il Like Button o per i Social Plugins. Intesys Talk Pagina
  • 40. Graph API Explorer Lo strumento pi湛 utile di tutta la suite messa a disposizione da Facebook 竪 il Graph API Explorer. Permette di fare tutti i test del caso con le API per andare a capire quale API andare ad utilizzare. Intesys Talk Pagina
  • 41. Javascript Test Console La Javascript Test Console 竪 un tool che permette di andare a testare tutte le funzionalit dell'SDK Javascript. Sono presenti gi molti esempi di codice da lanciare per vedere il funzionamento dell'SDK. Intesys Talk Pagina
  • 42. Funzionalit avanzate - FQL - Dialogs - Credits - I18N - Chat API Intesys Talk Pagina
  • 43. Facebook Query Language (FQL) FQL 竪 un linguaggio, molto simile a SQL, creato da Facebook per interrogare la vaste base dati in maniera facile. Ad esempio la query: SELECT uid FROM user WHERE is_app_user = 1 AND uid IN (SELECT uid FROM friend WHERE uid1 = $app_user)ritorna tutti gli id degli utenti amici dell'utente che sta utilizzando l'app. Un altro esempio per recuperare nome,cognome e avatar dell'utente che sta usando l'app. function getQuery() { FB.api('/me', function(response){ var query = FB.Data.query('select name, hometown_location, sex, pic_square from user where uid={0}', response.id); query.wait(function(rows) { $('#fql-data').html('Il tuo nome:' + rows[0].name + "<br/>" +'<img src=/FMRiggio/sviluppare-applicazioni-facebook/"& + rows[0].pic_square + '" alt=""/>' + "<br/>"); }); }); } La chiamata si divide in 2 fasi: 1 - l'esecuzione della query 2 - l'attesa dei risultati tramite query.wait() che poi popola un div html. FQL 竪 molto utile perch竪 permette di utilizzare funzionalit avanzate che con le Graph API sarebbero impossibili, ad esempio inserire chiamate multiple in una singola chiamata. Per approfondire si rimanda alla documentazione ufficiale: http://developers.facebook.com/docs/reference/fql/ Intesys Talk Pagina
  • 44. Dialogs I popup tipici di Facebook(dialogs) mantengono la grafica di facebook senza necessitare di permessi degli utenti per essere usati, in quanto i popup stessi necessitano dell'interazione dell'utente al suo interno. Possono essere usati in qualsiasi tipo di applicazione, su Facebook, su un sito o su un app mobile. Si possono utilizzare tramite la costruzione di un URL o utilizzando uno degli helper dei vari SDK. Ogni dialog 竪 si compone di un metodo ed alcuni parametri. L'URL inizia con "http://www.facebook.com/dialog", seguito dal metodo e dai parametri. Ad esempio il popup per inserire un post sulla propria bacheca. http://www.facebook.com/dialog/feed? app_id=123456789101112& redirect_uri=http://www.example.com/response/ Intesys Talk Pagina
  • 45. Facebook Credits Facebook credits 竪 un sistema di pagamento che permette agli sviluppatori di applicazioni Facebook di guadagnare in maniera semplice e veloce. Utilizzare Facebook Credits 竪 utile perch竪: - gli utenti sono gi fidelizzati con Facebook e si fidano ad effettuare pagamenti per mezzo della piattaforma - Facebook supporta pi湛 di 80 metodi di pagamento in 50 paesi ed 竪 in continua espansione I vari flussi di pagamento vengono effettuati attraverso un set di API messe a disposizione della piattaforma. Un esempio di come questo metodo di guadagno 竪 stato vantaggioso 竪 Farmville. Gioco in flash che conta circa 29 milioni di utenti attivi ed un sistema di pagamento effettuato tramite Facebook Credits e Paypal. Poi quotata in borsa (la prima azienda ad essere quotata in borsa per la vendita di beni virtuali) 竪 arrivata ad essere valutata circa 5 miliardi di dollari. Ovviamente Facebook offrendo il bacino di utenti pi湛 grande del mondo vuole anche qualcosa in cambio, si parla di circa il 30% delle transazioni effettuate tramite la piattaforma. Intesys Talk Pagina
  • 46. Internazionalization Facebook 竪 disponibile in pi湛 di 70 lingue grazie ad un particolare framework che permette alla comunit stessa di tradurre le etichette. L'elenco di tutte le lingue disponibili si trova all'interno di un file XML (http://www.facebook.com/translations/FacebookLocales.xml). Le lingue sono codificate tramite i codici standard ISO e il codice del paese separate da un'underscore (it_IT, en_US). Per determinare la lingua da utilizzare pi湛 opportunamente, basta esaminare la signed_request di un utente e andare ad interpretare il valore della variabile locale. Le varie localizzazioni vengono fatte attraverso lSDK Javascript, al momento dellinclusione: //connect.facebook.com/it_IT/all.js Facebook mette a disposizione un app, per effettuare il translating della propria seguendo alcuni semplici passi descritti qui: https://developers.facebook.com/docs/internationalization/ Intesys Talk Pagina
  • 47. Chat API Una cosa molto utile che ha fatto Facebook 竪 stato di mettere a disposizione le API della chat per dare la possibilit di integrare un sistema di instant-messaging sul proprio sito/app. Le API si basano sugli standard XMPP (Extensible Messagging Presence Protocol). Sono molto semplici da implementare, e la documentazione 竪 molto ricca (https://developers.facebook.com/docs/chat/), intanto un breve elenco di funzionalit e limitazioni. Funzionalit messe a disposizione: - Autenticazione sulla piattaforma tramite SASL (Simple Authentication and Security Layer) - Autenticazione dell utente tramite Username/Password con Digest-MD5 - Messaggi inviati e ricevuti in plain-text - Invio delle notifiche di stato (sto scrivendo, online, offline) sullo standard XEP-0085 (sempre XMPP) - Ricezione di vCard sullo standard XEP-0054 (semper XMPP) - Ricezione delle foto dagli amici Limitazioni imposte: - non si inviano/ricevono messaggi in HTML - La rimozione degli utenti dalla chat-room non avviene secondo gli standard XMPP - Non c 竪 nessun controllo sui messaggi inviati (parolacce, insulti, ecc.) - Altre funzionalit che non rispettono gli standard XMPP Intesys Talk Pagina
  • 48. Fonti Potete trovare altro materiale relativo allo sviluppo di applicazioni Facebook: Online - Documentazione ufficiale (https://developers.facebook.com/docs/) - BigThink (http://www.bigthink.it/) Cartaceo - IoProgrammo (ne parla in svariati numeri) - Creare applicazioni per Facebook ( http://www.hoepli.it/libro/creare-applicazioni-per-facebook/9788882339920.asp) Prossimamente online sul mio blog: - www.good2know.it Intesys Talk Pagina
  • 49. Do You Have Any Questions? Filippo Riggio Developer filippo.riggio@intesys.it Intesys Talk Pagina