Esecuzione dell'applicazione Facebook su localhost


92

Ho intenzione di connettermi alla chat di Facebook dal mio localhost. Avrò bisogno di ottenere la chiave della sessione da Facebook. Quando fornisco l'URL del sito come localhost:8080o ip-address:8080non funziona.

Ho letto della configurazione di due app con 2 chiavi API diverse, una gira su dev m / ce l'altra su localhost ma non l'ho capito.

Qualcuno può spiegare come eseguire un'app Facebook su localhost?


@Kavya Stai cercando di creare un'applicazione di chat Facebook per desktop?
Searock

sì ... voglio colpire il server Facebook dal mio m / c ... ho visto un post riguardante lo stesso qui stackoverflow.com/questions/1877913/… non ho capito ...
entusiasta

@Kavya Se vuoi crearne uno, non hai menzionato il linguaggio di programmazione, che intendi utilizzare?
Searock,

2
Ho scritto un tutorial su questo.
ifaour

5
@xoxoxo Si prega di utilizzare la punteggiatura e l'ortografia corrette nella comunicazione.
bart

Risposte:


77

Ho scritto un tutorial su questo qualche tempo fa.

Il punto più importante è l '"URL del sito":

URL del sito: http: // localhost / app_name /

Dove la struttura delle cartelle è qualcosa di simile:

app_name
¦   index.php
¦
+---canvas
¦   ¦   index.php
¦   ¦
¦   +---css
¦           main.css
¦           reset.css
¦
+---src
        facebook.php
        fb_ca_chain_bundle.crt

EDIT:
Kavya : come fa il server FB a riconoscere il mio localhost anche senza un IP o una porta ??

Non penso che questo abbia nulla a che fare con Facebook, immagino che dal momento che il srcparametro iframe viene caricato dal lato client, tratterà il tuo URL locale come se lo mettessi direttamente nel tuo browser.

Ad esempio, avere un file sul tuo server online con contenuto (ad esempio online.php):

<iframe src="http://localhost/test.php" width="100%" height="100%">
    <p>Not supported!</p>
</iframe>

E nella directory principale dell'host locale, avere il file test.php:

<?php echo "Hello from Localhost!"; ?>

Ora visita http://your_domain.com/online.phpvedrai il contenuto del tuo file localhost!

Questo è il motivo per cui gli abbonamenti in tempo reale e la revoca dell'autorizzazione dei callback (solo per menzionarlo) non funzioneranno con gli URL localhost! perché Facebook eseguirà il ping (invierà richieste http) a questi URL ma ovviamente il server Facebook non tradurrà quegli URL nei tuoi!


Non riesco a trovare l '"URL del sito", nessuna idea di dove / o di quale scheda si trova?
user962206

funziona per la porta 8080? Ricevo ancora l'errore con l'URL del sito: http://localhost:8080/auth/index.htmle la pagina web che fornisce l'errore è http://localhost:8080/auth/index.htmle la linea channelurl è:channelUrl : '//localhost:8080/auth/channel.html',
negromante

Non capisco la parte "struttura delle cartelle". Se stai semplicemente accedendo al tuo sito web con Facebook per caricare i commenti di Facebook sulla tua pagina, hai ancora bisogno di quella struttura della tela?
AlxVallejo

Ci sono alcuni strumenti di tunneling che ti permetteranno di dare al tuo localhost un nome pubblico e renderlo visibile, in modo che Facebook possa eseguire il ping di nuovo. Ne ho creato uno, chiamato PageKite , ce ne sono anche altri.
Bjarni Rúnar

29

se usi localhost:

in Facebook -> Impostazioni -> Base, nel campo "App Domains" scrivi "localhost", quindi fai clic su "+ Aggiungi piattaforma" scegli "Sito Web",

creerà due campi "URL sito mobile" e "URL sito", in "URL sito" scrivere di nuovo "localhost".

per me va bene.


grazie, ho provato le altre soluzioni ma alla fine questa è stata quella che ha funzionato,
rahulmishra

nel campo URL del sito avevo: localhost , ma non funzionava Ho anche aggiunto localhost al campo App Domain come hai detto, funziona bene grazie
RegarBoy

23

Puoi anche modificare il file "host" e creare una variazione locale del tuo dominio.

Esempio

Se il tuo indirizzo reale dell'applicazione Facebook è "example.com" puoi creare il dominio "localhost.example.com" (accessibile solo dal tuo pc) nel tuo file "hosts" che punta a "localhost" ed eseguire il tuo sito web locale sotto questo dominio. Puoi ingannare Facebook in questo modo.


1
funziona come un incantesimo, grazie! Cordiali saluti, host si trova su Windows 7 in C:/Windows/System32/drivers/etc/hostso su Ubuntu a/etc/hosts
pztrick

Ottima metodologia. Grazie.
Jerad

Su cosa imposto i domini delle app e l'URL della tela?
Craig

Tuttavia, ciò non ti consentirà di specificare la porta, quindi dovrai utilizzare un proxy inverso per consentire lo sviluppo sullo stesso dominio. Vedere stackoverflow.com/questions/10729034/...
MagicLAMP

7

Nelle impostazioni di base della tua app ( https://developers.facebook.com/apps ) in Impostazioni-> Di base-> Seleziona come la tua app si integra con Facebook ...

Utilizza "URL sito:" e "URL sito per dispositivi mobili:" per conservare gli URL di produzione e sviluppo. Entrambi i siti potranno autenticarsi. Sto solo usando Facebook per l'autenticazione, quindi non ho bisogno di nessuna delle funzionalità di reindirizzamento del sito mobile. Di solito cambio l '"URL del sito per dispositivi mobili:" nel mio sito "localhost: 12345" mentre sto testando l'autenticazione, quindi lo imposto di nuovo alla normalità quando ho finito.


6

2013 agosto. Facebook non consente di impostare un dominio con la porta per un'app, ad esempio "localhost: 3000".

Quindi puoi usare https://pagekite.net per eseguire il tunneling del tuo localhost:portdominio corretto.

Gli sviluppatori di Rails possono utilizzare http://progrium.com/localtunnel/ gratuitamente.

  • Facebook consente solo un dominio per App alla volta. Se stai cercando di aggiungerne un altro, come localhost, mostrerà un qualche tipo di errore diverso sul dominio. Assicurati di utilizzare un solo dominio per la richiamata e per l'impostazione del dominio dell'app al momento.

4

Quindi devo farlo funzionare oggi. Il mio URL è http://localhost:8888. Il dominio che ho dato a Facebook è localhost. Ho pensato che non funzionasse perché stavo cercando di estrarre i dati utilizzando il FB.apimetodo. Continuavo a ottenere un nome "non definito" e un'immagine senza una fonte, quindi sicuramente non avevo accesso al grafico.

Più tardi ho capito che il mio problema era che stavo solo passando un primo argomento di /mea FB.apie non avevo un segno. Quindi dovrai usare la FB.getLoginStatusfunzione per ottenere un token, che dovrebbe essere aggiunto /meall'argomento.


2

basta specificare l'URL della tela come http: // localhost / app_path .


@ifaour ho seguito il tuo tutorial .. mi ha dato un errore Codice errore API: 191 Descrizione errore API: L'URL specificato non è di proprietà dell'applicazione Messaggio di errore: redirect_uri non è di proprietà dell'applicazione. Non ho bisogno che funzioni all'interno di fb ...
entusiasta

@Kavya aggiungi semplicemente l'URL della tela come localhost / app_path e apri l'app fb, quindi eseguirà la tua app da localhost.
JustCoding

Un altro modo per farlo è mappare localmente l'URL del tuo sito / tela, invece di specificare localhost. È quindi possibile utilizzare il dominio di destinazione. Non sono sicuro dell'architettura su cui stai sviluppando, ma sotto Windows potresti ottenere ciò configurando il tuo sito IIS localmente con i collegamenti corretti e quindi aggiungendo un alias al tuo file hosts in C: \ Windows \ System32 \ drivers \ ecc ad esempio aggiungendo la riga 127.0.0.1 yourproject.yourdomain.net
dumbledad

2

Ok, non sono sicuro di cosa sia successo con queste risposte, ma ti farò sapere cosa ha funzionato per me come consigliato da uno sviluppatore senior al mio lavoro. Sto lavorando in Ruby on Rails e utilizzo il codice JavaScript di Facebook per ottenere i token di accesso.

Problema: per eseguire l'autenticazione, Facebook prende l'URL dalla barra degli indirizzi e lo confronta con quello che ha in archivio. Non ti permettono di usare localhost:3000per nessun motivo. Tuttavia, è possibile utilizzare un nome di dominio completamente truccata come yoursite.deveseguendo un server locale e che punta yoursite.deva 127.0.0.1:3000o dovunque il tuo localhost stava indicando.

Passaggio 1 : installa o aggiorna Nginx

$ brew install nginx(installa) o $ brew upgrade nginx(aggiorna)

Passaggio 2 : apri il tuo file di configurazione nginx

/usr/local/etc/nginx/nginx.conf (di solito qui)

/opt/boxen/config/nginx/nginx.conf(se usi Boxen)

Passaggio 3 Aggiungere questo bit di codice nel http {}blocco

Sostituisci proxy_passcon dove vuoi puntare yoursite.dev. Nel mio caso stava sostituendo localhost: 3000 o equivalente127.0.0.1:3000

server {
  listen       yoursite.dev:80;
  server_name  yoursite.dev;
  location / {
    proxy_pass http://127.0.0.1:3000;
  }
}

Passaggio 4 : modifica il file hosts, in /etc/hostssu Mac per includere

127.0.0.1   yoursite.dev

Questo file indirizza i domini a localhost. Nginx ascolta su localhost e reindirizza se soddisfa una regola.

Passaggio 5 : ogni volta che utilizzi il tuo ambiente di sviluppo in futuro, utilizzi yoursite.devnella barra degli indirizzi anziché in localhost:3000modo che Facebook ti acceda correttamente.


1

Forward è un ottimo strumento per aiutare con lo sviluppo di app Facebook localmente, supporta SSL quindi la questione del certificato non è un problema.

https://forwardhq.com/in-use/facebook

DISCLAIMER: Sono uno degli sviluppatori


1
E PageKite è uno dei concorrenti di Forward (ce l'ho fatta!). ;-)
Bjarni Rúnar

Dopo aver provato tutto il resto sotto il sole, questo ha funzionato per me. L'unico problema è che tutto questo inoltro è davvero lento. Meglio che non ricevere callback FB però! Grazie
Craig

0

È necessario configurare l'app in modo che venga eseguita su https per localhost

Puoi seguire i passaggi indicati in questo per configurare HTTPS su Ubuntu

https://www.digitalocean.com/community/articles/how-to-create-a-ssl-certificate-on-apache-for-ubuntu-12-04

È necessario eseguire i seguenti passaggi:

installa apache (se non lo hai)

sudo apt-get install apache2

Fase uno: attivare il modulo SSL

sudo a2enmod ssl
sudo service apache2 restart

Passaggio due: creare una nuova directory

sudo mkdir /etc/apache2/ssl

Passaggio tre: creare un certificato SSL autofirmato

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache/ssl/apache.key -out /etc/apache2/ssl/apache.crt

Con questo comando, creeremo sia il certificato SSL autofirmato che la chiave del server che lo protegge e li inseriremo entrambi nella nuova directory. La riga più importante è "Nome comune". Inserisci qui il tuo nome di dominio ufficiale o, se non ne hai ancora uno, l'indirizzo IP del tuo sito.

Nome comune (ad es. FQDN del server o TUO nome) []: example.com o localhost

Passaggio quattro: configurazione del certificato

sudo vim /etc/apache2/sites-available/default-ssl

Trova le righe seguenti e modifica quelle con le tue impostazioni

ServerName localhost o example.com

SSLEngine su SSLCertificateFile /etc/apache2/ssl/apache.crt

SSLCertificateKeyFile /etc/apache2/ssl/apache.key

Passaggio cinque: attivare il nuovo host virtuale

sudo a2ensite default-ssl
sudo service apache2 reload

0

Un trucco:

Usa MAMPPRO e crea: nome server: l'indirizzo ESATTO del tuo sito web (es: helloworld.com) sul tuo sito sul tuo disco

Su Facebook: così puoi mantenere anche l'URL del tuo sito originale (ad esempio: helloworld.com)

Ora capisci che quando digiti il ​​tuo sito web nella barra degli indirizzi sei in locale ! ..e quando vuoi essere online, disattiva il server su MAMP PRO ..

:)


0

Nessuna delle risposte sopra ha funzionato per me. Sto utilizzando FB API 2.5. La mia era una combinazione di problemi che portavano al successo una volta risolti

  1. Crea un'app di prova per assicurarti che venga mantenuta e gestita come tale e possa essere disabilitata quando verrà pubblicata
  2. Leggi correttamente il messaggio di errore :) - Ho dovuto abilitare "Accesso Web OAuth" CON "Accesso OAuth client"
  3. Usa https://www.whatismyip.com/ per scoprire qual è il mio IP attuale
  4. Crea un record A sul mio dominio, ad esempio http://localhost.mydomain.com che punta al mio IP corrente

Probabilmente non è l'ideale come modifica dell'IP dinamico e si potrebbe probabilmente usare DynDNS o qualcosa di simile per rendere l'IP più "statico" ma ha funzionato per me


0

Nel mio caso il problema si è rivelato essere il Chrome che blocca la richiesta CORS da localhost: 4200 al sito web api di Facebook. Esecuzione di Chrome con questa impostazione: "YOUR_PATH_TO_CHROME \ Google \ Chrome \ Application \ chrome.exe" --disable-web-security --user-data-dir = "c: / chrome ha funzionato alla perfezione durante lo sviluppo. Anche senza localhost aggiunto alle impostazioni dell'app Facebook.


funziona bene per lo sviluppo locale, ma in produzione è necessaria l'autorizzazione di Facebook (che si ottiene dalla chiamata dell'opzione del browser) per condividere i dati da Facebook
radio_head
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.