Ausführen der Facebook-Anwendung auf localhost

92

Ich plane, von meinem lokalen Host aus eine Verbindung zum Facebook-Chat herzustellen. Ich muss den Sitzungsschlüssel von Facebook erhalten. Wenn ich die Site-URL als gebe localhost:8080oder ip-address:8080es nicht funktioniert.

Ich habe über das Einrichten von zwei Apps mit zwei verschiedenen API-Schlüsseln gelesen, von denen einer auf dev m / c und einer auf localhost ausgeführt wird, aber ich habe es nicht ganz verstanden.

Kann jemand erklären, wie man eine Facebook-App auf localhost ausführt?

begeistert
quelle
@Kavya Versuchen Sie, eine Desktop-Facebook-Chat-Anwendung zu erstellen?
Searock
Ja ... ich möchte den Facebook-Server von meinem M / C aus erreichen ... habe hier einen Beitrag zu diesem Thema gesehen. stackoverflow.com/questions/1877913/… Ich verstehe nicht ...
begeistert
@Kavya Wenn Sie eine erstellen möchten, haben Sie die Programmiersprache, die Sie verwenden möchten, nicht erwähnt?
Searock
2
Ich habe ein Tutorial darüber geschrieben.
ifaour
5
@xoxoxo Bitte verwenden Sie in Ihrer Kommunikation die richtige Zeichensetzung und Rechtschreibung.
Bart

Antworten:

77

Ich habe vor einiger Zeit ein Tutorial darüber geschrieben.

Der wichtigste Punkt ist die "Site-URL":

Site-URL: http: // localhost / app_name /

Wo die Ordnerstruktur so etwas wie:

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

EDIT:
Kavya : Wie erkennt der FB-Server meinen lokalen Host auch ohne IP oder Port?

Ich glaube nicht , das nichts mit Facebook zu tun hat, ich denke , da die iframe - srcParameter von Client-Seite geladen werden Ihre lokale URL behandeln würde , als ob Sie es auf Ihrem Browser direkt setzen.

Haben Sie beispielsweise eine Datei mit Inhalten auf Ihrem Online-Server (z. B. online.php):

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

Und in Ihrem localhost-Stammverzeichnis haben Sie die Datei test.php:

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

Besuchen http://your_domain.com/online.phpSie jetzt, Sie werden den Inhalt Ihrer localhost-Datei sehen!

Aus diesem Grund funktionieren Echtzeitabonnements und das Deaktivieren von Rückrufen (um nur zu erwähnen) nicht mit lokalen Host- URLs! weil Facebook an diese URLs pingt (http-Anfragen sendet), aber der Facebook-Server diese URLs offensichtlich nicht in Ihre übersetzt!

ifaour
quelle
Ich kann anscheinend keine Ahnung haben, wo / oder auf welcher Registerkarte sich die Site-URL befindet.
user962206
funktioniert das für 8080 port? Ich erhalte immer noch den Fehler mit der Website-URL: http://localhost:8080/auth/index.htmlund die Webseite, die den Fehler http://localhost:8080/auth/index.htmlausgibt, ist und die Channelurl-Zeile lautet:channelUrl : '//localhost:8080/auth/channel.html',
Nekromant
Ich verstehe den Teil 'Ordnerstruktur' nicht. Wenn Sie sich einfach mit Facebook auf Ihrer Website anmelden, um Facebook-Kommentare auf Ihre Seite zu laden, benötigen Sie diese Canvas-Struktur noch?
AlxVallejo
Es gibt einige Tunneling-Tools, mit denen Sie Ihrem lokalen Host einen öffentlichen Namen geben und ihn sichtbar machen können, damit Facebook zurückpingen kann. Ich habe einen mit dem Namen PageKite erstellt , es gibt auch andere.
Bjarni Rúnar
29

Wenn Sie localhost verwenden:

Schreiben Sie in Facebook -> Einstellungen -> Basic im Feld "App Domains" "localhost" und klicken Sie auf "+ Plattform hinzufügen". Wählen Sie "Website".

Es werden zwei Felder "Mobile Site URL" und "Site URL" erstellt. In "Site URL" schreiben Sie erneut "localhost".

funktioniert bei mir.

user3531155
quelle
danke, ich habe die anderen
lösungen
im Site-URL-Feld hatte ich: localhost , aber es hat nicht funktioniert. Ich habe auch localhost zum App-Domain-Feld hinzugefügt, wie Sie erwähnt haben. Dies funktioniert gut, danke
RegarBoy
23

Sie können auch die 'Hosts'-Datei bearbeiten und lokale Variationen Ihrer Domain erstellen.

Beispiel

Wenn Ihre echte Facebook-Anwendungsadresse "example.com" lautet, können Sie in Ihrer "hosts" -Datei, die auf "localhost" verweist, die Domain "localhost.example.com" (nur von Ihrem PC aus zugänglich) erstellen und Ihre lokale Website unter dieser Domain ausführen. Sie können Facebook auf diese Weise austricksen.

Mateusz Charytoniuk
quelle
1
funktioniert wie ein Zauber, danke! FYI-Hosts befindet sich unter Windows 7 um C:/Windows/System32/drivers/etc/hostsoder unter Ubuntu um/etc/hosts
pztrick
Hervorragende Methodik. Vielen Dank.
Jerad
Auf was setze ich die App-Domänen und die Canvas-URL?
Craig
Auf diese Weise können Sie den Port jedoch nicht angeben, sodass Sie einen Reverse-Proxy verwenden müssten, um die Entwicklung in derselben Domäne zu ermöglichen. Siehe stackoverflow.com/questions/10729034/…
MagicLAMP
7

In den Grundeinstellungen Ihrer App ( https://developers.facebook.com/apps ) unter Einstellungen-> Basis-> Wählen Sie aus, wie Ihre App in Facebook integriert werden soll ...

Verwenden Sie "Site-URL:" und "Mobile Site-URL:", um Ihre Produktions- und Entwicklungs-URLs zu speichern. Beide Sites können sich authentifizieren. Ich verwende nur Facebook zur Authentifizierung, sodass ich keine der Umleitungsfunktionen für mobile Websites benötige. Normalerweise ändere ich die "URL der mobilen Site:" in meine Site "localhost: 12345", während ich die Authentifizierung teste, und setze sie dann wieder auf "Normal", wenn ich fertig bin.

Carter Medlin
quelle
6

2013 August. Facebook erlaubt es nicht, eine Domain mit Port für eine App festzulegen, zum Beispiel "localhost: 3000".

Sie können also https://pagekite.net verwenden, um Ihre localhost:portDomain auf die richtige Domain zu tunneln .

Rails-Entwickler können http://progrium.com/localtunnel/ kostenlos nutzen.

  • Facebook erlaubt jeweils nur eine Domain für die App. Wenn Sie versuchen, einen anderen als localhost hinzuzufügen, wird ein anderer Fehler in Bezug auf die Domäne angezeigt. Stellen Sie sicher, dass Sie jeweils nur eine Domain für den Rückruf und die Einstellung der App-Domain verwenden.
Gediminas
quelle
4

Also habe ich das heute zum Laufen gebracht. Meine URL ist http://localhost:8888. Die Domain, die ich Facebook gegeben habe, ist localhost. Ich dachte, dass es nicht funktioniert, weil ich versucht habe, Daten mit der FB.apiMethode abzurufen. Ich bekam immer wieder einen "undefinierten" Namen und ein Bild ohne Quelle, hatte also definitiv keinen Zugriff auf das Diagramm.

Später wurde mir klar, dass mein Problem wirklich darin bestand, dass ich nur ein erstes Argument an /meto FB.apiweitergab und keinen Token hatte. Sie müssen also die FB.getLoginStatusFunktion verwenden, um ein Token zu erhalten, das dem /meArgument hinzugefügt werden sollte .

Lorenzo Mangubat
quelle
2

Geben Sie einfach Ihre Canvas-URL als http: // localhost / app_path an .

JustCoding
quelle
@ifaour i follwoed ur tutorial .. its givin me error API-Fehlercode: 191 API-Fehlerbeschreibung: Die angegebene URL gehört nicht der Anwendung. Fehlermeldung: redirect_uri gehört nicht der Anwendung. Ich brauche es nicht, um in fb zu laufen ...
begeistert
@Kavya füge einfach die Canvas-URL als localhost / app_path hinzu und öffne die fb-App, damit deine App von localhost aus ausgeführt wird.
JustCoding
Eine andere Möglichkeit, dies zu tun, besteht darin, Ihre Site- / Canvas-URL lokal zuzuordnen, anstatt localhost anzugeben. Sie können dann Ihre Zieldomäne verwenden. Ich bin nicht sicher, auf welcher Architektur Sie entwickeln, aber unter Windows würden Sie dies erreichen, indem Sie Ihre IIS-Site lokal mit den richtigen Bindungen einrichten und dann Ihrer Hosts-Datei unter C: \ Windows \ System32 \ drivers \ etc. Einen Alias ​​hinzufügen zB Hinzufügen der Zeile 127.0.0.1 yourproject.yourdomain.net
dumbledad
2

Ok, ich bin mir nicht sicher, was mit diesen Antworten los ist, aber ich werde Sie wissen lassen, was für mich funktioniert hat, wie von einem erfahrenen Entwickler bei meiner Arbeit empfohlen. Ich arbeite in Ruby on Rails und verwende den JavaScript-Code von Facebook, um Zugriffstoken zu erhalten.

Problem: Um eine Authentifizierung durchzuführen, nimmt Facebook die URL aus Ihrer Adressleiste und vergleicht sie mit der Datei, die sie gespeichert haben. Sie erlauben Ihnen nicht, aus localhost:3000irgendeinem Grund zu verwenden. Sie können jedoch ein fertig konfektioniertes Domain - Namen wie verwenden yoursite.devdurch einen lokalen Server ausgeführt wird und zeigt yoursite.devauf 127.0.0.1:3000oder wo auch immer Ihr localhost deutete auf.

Schritt 1 : Installieren oder aktualisieren Sie Nginx

$ brew install nginx(installieren) oder $ brew upgrade nginx(aktualisieren)

Schritt 2 : Öffnen Sie Ihre Nginx-Konfigurationsdatei

/usr/local/etc/nginx/nginx.conf (normalerweise hier)

/opt/boxen/config/nginx/nginx.conf(wenn Sie Boxen verwenden)

Schritt 3 Fügen Sie diesen Code in Ihren http {}Block ein

Ersetzen Sie proxy_passdurch, wo immer Sie zeigen möchten yoursite.dev. In meinem Fall ersetzte es localhost: 3000 oder das Äquivalent127.0.0.1:3000

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

Schritt 4 : Bearbeiten Sie Ihre Hosts-Datei /etc/hostsauf dem Mac, um sie einzuschließen

127.0.0.1   yoursite.dev

Diese Datei leitet Domains an localhost weiter. Nginx hört auf localhost und leitet um, wenn es einer Regel entspricht.

Schritt 5 : Jedes Mal, wenn Sie Ihre Entwicklungsumgebung in Zukunft verwenden, verwenden Sie die yoursite.devin der Adressleiste, anstatt localhost:3000dass Facebook Sie korrekt anmeldet.

Alex Levine
quelle
1

Forward ist ein großartiges Tool für die lokale Entwicklung von Facebook-Apps. Es unterstützt SSL, sodass die Zertifizierungssache kein Problem darstellt.

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

HAFTUNGSAUSSCHLUSS: Ich bin einer der Entwickler

blahed
quelle
1
Und PageKite ist einer der Konkurrenten von Forward (ich habe es geschafft!). ;-)
Bjarni Rúnar
Nachdem ich alles andere unter der Sonne ausprobiert hatte, funktionierte dies für mich. Das einzige Problem ist, dass die Weiterleitung nur sehr langsam ist. Besser als keine FB-Rückrufe zu bekommen! Vielen Dank
Craig
0

Sie müssen Ihre App so einrichten, dass sie über https für localhost ausgeführt wird

Sie können die hier angegebenen Schritte ausführen, um HTTPS unter Ubuntu einzurichten

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

Sie müssen folgende Schritte ausführen:

Installieren Sie Apache (falls Sie nicht haben)

sudo apt-get install apache2

Erster Schritt: Aktivieren Sie das SSL-Modul

sudo a2enmod ssl
sudo service apache2 restart

Schritt 2: Erstellen Sie ein neues Verzeichnis

sudo mkdir /etc/apache2/ssl

Schritt 3: Erstellen Sie ein selbstsigniertes SSL-Zertifikat

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

Mit diesem Befehl erstellen wir sowohl das selbstsignierte SSL-Zertifikat als auch den Serverschlüssel, der es schützt, und legen beide in das neue Verzeichnis. Die wichtigste Zeile ist "Common Name". Geben Sie hier Ihren offiziellen Domainnamen oder, falls Sie noch keinen haben, die IP-Adresse Ihrer Site ein.

Allgemeiner Name (z. B. FQDN des Servers oder IHR Name) []: example.com oder localhost

Schritt 4 - Richten Sie das Zertifikat ein

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

Suchen Sie die folgenden Zeilen und bearbeiten Sie diese mit Ihren Einstellungen

Servername localhost oder example.com

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

SSLCertificateKeyFile /etc/apache2/ssl/apache.key

Fünfter Schritt: Aktivieren Sie den neuen virtuellen Host

sudo a2ensite default-ssl
sudo service apache2 reload
waqas
quelle
0

Ein Trick:

Verwenden Sie MAMPPRO und erstellen Sie: Servername: die GENAUE Adresse Ihrer Website (z. B. helloworld.com) für Ihre Website auf Ihrer Festplatte

Auf Facebook: So können Sie auch Ihre ursprüngliche Site-URL behalten (zB: helloworld.com)

Jetzt verstehen Sie , dass , wenn Sie Ihre Website auf die Adressleiste eingeben Sie sind vor Ort ! ..und wenn Sie online sein möchten, inaktivieren Sie einfach den Server auf MAMP PRO ..

:) :)

Sebastien Horin
quelle
0

Keine der obigen Antworten hat bei mir funktioniert. Ich verwende die FB API 2.5. Meins war eine Kombination von Problemen, die nach ihrer Lösung zum Erfolg führten

  1. Erstellen Sie eine Test-App, um sicherzustellen, dass sie als solche verwaltet und verwaltet wird und beim Start deaktiviert werden kann
  2. Lesen Sie die Fehlermeldung richtig :) - Ich musste "Web OAuth Login" MIT "Client OAuth Login" aktivieren.
  3. Verwenden Sie https://www.whatismyip.com/ , um herauszufinden, wie meine aktuelle IP lautet
  4. Erstellen Sie einen A-Eintrag auf meiner Domain, dh http://localhost.mydomain.com , der auf meine aktuelle IP verweist

Es ist wahrscheinlich nicht ideal, da sich die dynamische IP ändert, und man könnte wahrscheinlich DynDNS oder ähnliches verwenden, um die IP "statischer" zu machen, aber es hat bei mir funktioniert

Cornelius Parkin
quelle
0

In meinem Fall stellte sich heraus, dass Chrome die CORS-Anfrage von localhost: 4200 an die Facebook-API-Website blockiert. Ausführen von Chrome mit dieser Einstellung: "YOUR_PATH_TO_CHROME \ Google \ Chrome \ Application \ chrome.exe" --disable-web-security --user-data-dir = "c: / chrome hat bei der Entwicklung wie ein Zauber funktioniert. Auch ohne lokalen Host zu den Einstellungen der Facebook-App hinzugefügt.

nomadev
quelle
funktioniert gut für die lokale Entwicklung, aber in der Produktion benötigen Sie die Erlaubnis von Facebook (die durch den Optionsaufruf des Browsers erhalten wird), um Daten von Facebook zu teilen
radio_head