
Uno dei principali problemi che si riscontrano nello sviluppare Applicazioni Facebook — in particolare quelle FBML – è l’impossibilità di testarle in locale.
Uno sviluppatore alle prime armi cosa fa? Inizia a creare la sua Applicazione direttamente sul server remoto, uploadando i file via FTP ad ogni singola modifica. Un vero suicidio! E’ impossibile sviluppare in questo modo e allunga un sacco i tempi.
Potresti allora essere tentato di impostare http://localhost/ (piuttosto che http://127.0.0.1/) come indirizzo della tua Applicazione nelle impostazioni. Forse può funzionare per le Applicazioni Iframe, ma ovviamente non va bene nel caso di App FBML, in quanto Facebook non ha accesso alla tua macchina.
Per fortuna ci sono diverse soluzioni:
- Avere un indirizzo IP pubblico.
- Creare un SSH Reverse Tunnel.
- Usare un DNS dinamico.
Io ho scelto la terza soluzione, funziona perfettamente e ora ti spiegherò come ho fatto (dò per scontato che tu abbia già installato in locale un server Apache+MySQL+PHP, ad esempio).
1. Crea il DNS dinamico
Cos’è un Dynamic DNS? Si tratta di un servizio che tiene traccia dell’indirizzo IP della tua macchina locale e redirige il traffico di un dominio verso tale IP. Risulta molto utile nel caso il tuo Internet Service Provider ti assegni un nuovo IP ogni volta che ti connetti.

Per prima cosa, quindi, registrati gratuitamente su DynDNS, uno dei siti che offre questo servizio. La versione Free andrà benissimo:
- Inserisci un nome per il tuo sottodominio.
- Seleziona il dominio di secondo livello che ti piace di più.
- Lascia selezionato “Host with IP address”.
- Inserisci il tuo attuale indirizzo IP.
- Procedi.
E’ tutto gratis, non ti verrà chiesta alcuna carta di credito.
2. Tieni aggiornato il DNS
Affinchè il tuo nuovo DNS rimanga sempre aggiornato con il tuo indirizzo IP, devi scaricare un software che mandi un ping ogni TOT minuti: DynDNS Updater.
Scaricalo, installalo e configuralo con i tuoi dati di login.
3. Conosci te stesso (e la tua rete)
Se tutto va bene, accedendo al DNS (ad esempio http://pippo.is-a-geek.com) verrai ora collegato all’IP della tua macchina.
Se, come me, sei connesso ad Internet tramite un router, ti comparirà il pannello di accesso. Questo perchè avrai l’IP esterno che si riferisce al router, mentre ogni singolo computer connesso alla rete avrà un IP interno. In questo caso, non resta che impostare su quale computer girare la richiesta.
4. Buca il Firewall del tuo router
Ora, infatti, devi dire al router di redirigere tutto il traffico che arriva sulla porta 80 (quella dell’http) verso l’IP del tuo computer:
- Per prima cosa verifica l’IP interno con un ipconfig da Prompt dei comandi: il tuo IP sarà probabilmente qualcosa tipo http://192.168.0.2/.
- Accedi alle impostazioni del tuo router (nel mio caso accessibili tramite browser a http://192.168.0.1/).
- Configuralo seguendo le istruzioni che trovi su questo sito, in base al modello del tuo router.
Qui trovi, ad esempio, la configurazione corretta per il mio router Netgear DG834G: in sostanza devi creare un servizio sulla porta 80 e impostare una regola nel Firewall del router, in modo che il traffico venga rimandato all’IP http://192.168.0.2/.
5. Buca il Firewall del tuo computer
In teoria ora, facendo accesso a http://pippo.is-a-geek.com chiunque dovrebbe poter vedere il contenuto del tuo localhost. Se così non fosse, può essere dovuto al tuo Firewall.
Accedi ad esso, crea una regola per Apache e apri la porta TCP numero 80.
Fatto!
6. Ancora non funziona?
Se continui ad avere problemi (visualizzi una pagina bianca, piuttosto che continua a mostrarti sempre il pannello di accesso al router), puoi seguire questa soluzione:
- Accedi alle impostazioni di Apache (file httpd.conf) e fallo girare su una porta diversa dall’80 (8000 ad esempio).
- Torna alle impostazioni del router e esegui la procedura del punto 4, redirezionando però il traffico della porta 8000.
- Accedi al tuo DNS specificando la porta (es: http://pippo.is-a-geek.com:8000) e stavolta dovresti vedere il tuo localhost!
Ancora niente? Ma sei sicuro di aver avviato Apache, vero??
Io ho riscontrato un ulteriore problema: accedendo al mio IP locale (http://192.168.0.2/) non vedevo il localhost (a cui invece si può accedere anche via http://127.0.0.1/), quindi lo stesso accadeva accedendo dal DNS.
Ho risolto con una soluzione estrema: nel file httpd.conf, oltre a cambiare la porta ho cambiato anche l’IP! Ho impostato:
Listen 192.168.0.2:8000
Non so se sia una mossa legittima e ve la consiglio come ultima risorsa, fatto sta che finalmente ha funzionato!
7. Imposta l’Applicazione Facebook
Inutile dire che ora come Canvas Callback URL dovrai impostare il tuo DNS (con tanto di porta, se diversa dalla 80). Quindi nel nostro esempio: http://pippo.is-a-geek.com:8000.
Ora potrai finalmente sviluppare la tua Applicazione in locale! Ogni modifica che farai sarà aggiornata in tempo reale!
Ovviamente, finchè il tuo pc è acceso, Apache è avviato ed il DynDNS Updater funzionante, chiunque potrà accedere all’Applicazione dall’esterno!
Se avete problemi e non vi funziona nulla, non chiedete a me stavolta!! Non me ne intendo assolutamente di IP, router e Co. e non sono un sistemista: già tanto che sono riuscito a districarmi in tutto questo macello.
Ho comunque voluto scrivere questa guida per chi ha avuto i miei stessi problemi.
Fonte: Lullabot




Credo che sia comunque impossibile per gli utenti di fastweb, vero?
Io ho sempre sviluppato su un server apparte
Sì, penso che per Fastweb ci siano ulteriori problemi. Se non sbaglio, siete tutti sotto lo stesso IP…
Per quanto riguarda il file httpd.conf credo tu abbia fatto bene e penso sia un passaggio obbligato da compiere. In pratica l’ indirizzo locale è un indirizzo che permette ad una macchina non connessa di far comunicare fra loro programmi che in realtà sono stati creati per comunicare tramite la rete. Credo che il localhost possa essere visto come un indirizzo ip di una scheda di rete virtuale. Nel dare questa definizione sicuramente mi sbaglio ed inviti chi ne sapesse di più a correggermi
Strano che però nessuna guida ne parlasse… Davano per scontato che accedere via browser a localhost o all’ip interno desse lo stesso risultato…. mah…
Ma per visualizzare l’ applicazione bisogna andare sempre su http://apps.facebook.com/nomeapplicazione/ o sbaglio ? Se si inserisce il localhost la pagina non va in loop ?
Certo, poi richiami l’applicazione esattamente come al solito. Se richiami il localhost, non passi da Facebook!