2011-01-06 7 views
2

Coca-Cola scheint es ziemlich gut getroffen zu haben. Schon vor der Interaktion mit dem Benutzer, zu verwalten, um sie wissen, wo Sie their Facebook page sind:User-Standort auf Facebook aufrufen Tab

You're in Denmark, dude. Chill.

Dies funktioniert in IE, so dass kein HTML5 beteiligt (und nach allem, Facebook wird nicht erkennt das navigator Objekt in Javascript) .

Wie machen sie das?

+0

siehe die spätere Bearbeitung meiner Antwort, das ist die Lösung – misterjinx

Antwort

4

Zunächst einmal, ich glaube nicht, dass es mit Hilfe von Javascript getan werden kann. So können Sie eine serverseitige Sprache wie PHP verwenden.

Wenn Sie einen genaueren Blick von der Seite nehmen Sie (Coca Cola Landung tab), vorausgesetzt, Sie, dass die Auswahl des Landes sehen können, funktioniert auch, wenn der Benutzer mit Facebook nicht angemeldet ist.

Wenn Sie eine Facebook-Anwendung einrichten Sie eine Registerkarte URL zur Verfügung stellen kann. Dies ist die Adresse, die sich auf Ihre Canvas-URL bezieht, von der Facebook den Inhalt bereitstellt, wenn Ihre Anwendung einer Seite (innerhalb eines Tabs) hinzugefügt wird.

Wenn Sie einen var_dump der superglobalen Variablen $ _SERVER ausführen, würden Sie eine Variable mit dem Namen HTTP_X_FB_USER_REMOTE_ADDR sehen. Dies ist die IP-Adresse des jeweiligen Benutzers. Nachdem Sie die Benutzer-IP-Adresse erhalten haben, können Sie einfach einen Geolocation-Dienst verwenden, um das Land zu finden :).

Viel Glück!

später bearbeiten

Es scheint, dass die Variable i gesprochen hat ist in einem Register nicht zur Verfügung. Ich habe gerade noch ein paar Tests gemacht und entweder der Benutzer ist eingeloggt oder nicht, Sie haben immer die POST-Variable fb_sig_country, die die TLD des Landes ist, aus dem der Benutzer stammt.

+0

Das ist richtig. Ich bekomme 'user [country]' nach der Dekodierung der 'signed_request' FB sendet meine App. Was mich verwirrt, ist, dass ich das noch nie zuvor auf einer "signed_request" gesehen habe, die von einem Tab gesendet wurde. Weißt du, ob es neu ist? –

+0

Ich weiß es nicht genau, aber ich bin mir ziemlich sicher, dass dies von Anfang an verfügbar war. Prost! – misterjinx

2

Durch Facebook-App api ich bin sicher, sie sind in der Lage, die IP-Adresse des Benutzers zu erhalten und dann einen Geo-IP-Lookup. Oder facebook liefert einen api-Anruf, der ihnen sagt, welches Land.


EDIT:
Von http://developers.facebook.com/docs/guides/canvas

Um einen individuellen Benutzer Erlebnis zu schaffen, Facebook sendet Ihre Anwendung Informationen über die Benutzer. Diese Informationen werden an Ihre Canvas-URL unter Verwendung von HTTP POST innerhalb eines einzigen signed_request-Parameters übergeben, der ein base64url-codiertes JSON-Objekt enthält.

Wenn ein Benutzer zum ersten Mal die App zugreift, der signed_request Parameter enthält eine begrenzte Menge an Benutzerdaten. In Um Zugang zu allen Benutzer Informationen zu erhalten, die standardmäßig für Ihre Anwendung verfügbar sind (wie die Facebook ID des Benutzers ), muss der Benutzer Ihre Anwendung autorisieren. Facebook bietet eine Reihe von verschiedenen Möglichkeiten, um Griff Genehmigung vom Button Anmeldung bis hin zum manuellen der OAuth2.0 Fluss auf dem Webserver ausgeführt wird.

> Ein JSON-Array, das das Gebietsschema und das Land des aktuellen Benutzers enthält. Das Gebietsschema und Land sind immer verfügbar.

Sie erhalten eine begrenzte Menge an Informationen über den Benutzer, ihre locale und Land, und nur, bis sie die App autorisieren können Sie die Standardinformationen.

+0

Facebook gibt keine Benutzerinformationen frei, bis er oder sie aktiv mit der Seite interagiert, also nein für den ersten Teil. –

+0

Über den API-Aufruf (FBML/FBJS?), Wenn es einen gibt, bin ich mir dessen nicht bewusst. –

+0

Siehe zusätzliche Informationen, die ich hinzugefügt habe. –

1

Sie können dies sehr einfach über PHP

$country = $_POST['fb_sig_country']

Entwickler, die Registerkarten verwenden, um benutzerdefinierte finden unsere neue * fb_sig_country * Request-Header nutzen auf einem Benutzergebietsschema basiert unterschiedliche Inhalte anzuzeigen. Wenn Ihre Anwendung beispielsweise einen benutzerdefinierten Tab für die Anzeige der neuesten WM-Tabelle verwendet, können Sie mithilfe von fb_sig_country die Highlights für das Land eines Nutzers darstellen. (Hinweis: Wenn Sie fb_sig_country verwenden, müssen Sie auch den Fall behandeln, in denen das Feld leer ist, weil Sie nicht damit zufrieden, für jedes Land in der Welt haben könnte.)

über http://developers.facebook.com/blog/post/394

0

Facebook schickt den Strom Land und Gebietsschema des Benutzers im Benutzerabschnitt der signierten Anforderung. Lesen Sie hier: https://developers.facebook.com/docs/authentication/signed_request/

Es ist auch möglich, normale Geo-IP-Methoden zu verwenden, wenn Sie eine Iframe-Anwendung haben (die jetzt erforderlich ist, also höchstwahrscheinlich Sie tun). MaxMind bietet JavaScript-basierte Erkennung sowie Datenbanken zur Verwendung auf der Serverseite. Es ist kostenlos, wenn Sie irgendwo in Ihrer App einen Link zurück zu maxmind.com einfügen. http://www.maxmind.com/app/javascript_city