Получение местоположения пользователя на вкладке страницы Facebook - PullRequest
2 голосов
/ 06 января 2011

Coca-Cola, кажется, прибил это довольно хорошо. Еще до любого взаимодействия с пользователем им удается узнать, где вы находитесь на своей странице в Facebook :

You're in Denmark, dude. Chill.

Это работает в IE, поэтому HTML5 не используется (в конце концов, Facebook не распознает объект navigator в Javascript).

Как они это делают?

Ответы [ 4 ]

4 голосов
/ 06 января 2011

Прежде всего, я не думаю, что это можно сделать с помощью JavaScript. Вот как вы можете сделать это, используя серверный язык, такой как PHP.

Если вы внимательно посмотрите на предоставленную вами страницу (вкладка «Coca Cola»), вы увидите, что выбор страны работает, даже если пользователь не вошел в систему с помощью Facebook.

При настройке приложения для Facebook вы можете указать URL-адрес вкладки. Это адрес относительно вашего холста URL, с которого Facebook подает контент, когда ваше приложение добавляется на страницу (внутри вкладки).

Если вы сделаете var_dump суперглобальной переменной $ _SERVER, вы увидите переменную с именем HTTP_X_FB_USER_REMOTE_ADDR. Это IP-адрес соответствующего пользователя. После того, как вы получите IP-адрес пользователя, вы можете легко использовать службу геолокации, чтобы узнать страну:).

Удачи!

, позже отредактируйте

Кажется, переменная, о которой я говорил, недоступна на вкладке. Я только что провел еще несколько тестов, и либо пользователь вошел в систему, либо у вас всегда есть переменная POST с именем fb_sig_country, которая является TLD страны, из которой происходит пользователь.

2 голосов
/ 06 января 2011

Через API приложения Facebook я уверен, что они могут получить IP-адрес пользователя, а затем выполнить поиск географического IP-адреса. Или Facebook предоставляет вызов API, который сообщает им, в какой стране.


EDIT:
От http://developers.facebook.com/docs/guides/canvas

Для создания персонализированного пользователя опыт, Facebook отправляет ваши информация о приложении пользователь. Эта информация передается URL вашего Canvas с использованием HTTP POST в один параметр Sign_request который содержит base64url в кодировке Объект JSON.

Когда пользователь впервые получает доступ к вашему приложению, параметр Sign_request содержит ограниченный объем пользовательских данных . В Для того чтобы получить доступ ко всем пользователям информация доступна для вашего приложение по умолчанию (например, Facebook ID пользователя), пользователь должен Авторизуйте вашу заявку. facebook предлагает ряд различных способов обрабатывать авторизацию в пределах от Кнопка входа для выполнения вручную поток OAuth2.0 на вашем веб-сервере.

> Массив JSON, содержащий локаль и страна текущего пользователя. язык и страна всегда имеется.

Вы получаете ограниченный объем информации о пользователе, его локали и стране, и только после авторизации приложения вы можете получить информацию по умолчанию.

1 голос
/ 26 января 2011

Вы можете найти это очень просто через PHP

$country = $_POST['fb_sig_country']

Разработчики, использующие пользовательские вкладки, могут использовать наш новый заголовок запроса * fb_sig_country * для отображения различного контента на основелокаль пользователя.Например, если ваше приложение использует пользовательскую вкладку для отображения последних результатов Кубка мира, вы можете использовать fb_sig_country, чтобы представить основные моменты для страны пользователя.(Примечание: если вы используете fb_sig_country, вы также должны обработать случай, когда поле не заполнено, поскольку у вас может не быть контента для каждой страны в мире.)

через http://developers.facebook.com/blog/post/394

0 голосов
/ 19 октября 2011

Facebook передает страну и локаль текущего пользователя в пользовательской части подписанного запроса. Читайте здесь: https://developers.facebook.com/docs/authentication/signed_request/

Также возможно использовать обычные методы гео-ip, если у вас есть приложение iframe (которое сейчас требуется, так что, скорее всего, у вас). MaxMind обеспечивает обнаружение на основе JavaScript, а также базы данных для использования на стороне сервера. Это бесплатно, если вы включите ссылку на maxmind.com где-то в вашем приложении. http://www.maxmind.com/app/javascript_city

...