Запуск приложения Facebook на локальном хосте

92

Я планирую подключиться к чату Facebook с моего локального хоста. Мне нужно будет получить ключ сеанса от Facebook. Когда я даю URL-адрес сайта как localhost:8080или ip-address:8080он не работает.

Я читал о настройке двух приложений с двумя разными ключами API, одно из которых работает на dev m / c, а другое на localhost, но я не совсем понял.

Может ли кто-нибудь объяснить, как запустить приложение Facebook на локальном хосте?

восторженный
источник
@Kavya Вы пытаетесь создать настольное приложение для чата facebook?
Searock
да ... я хочу попасть на сервер facebook с моего m / c ... видел сообщение о том же здесь stackoverflow.com/questions/1877913/ ... я не понимаю ...
энтузиазмом
@Kavya Если вы хотите его создать, вы не упомянули язык программирования, который собираетесь использовать?
Searock
2
Я написал об этом учебник .
ifaour
5
@xoxoxo Пожалуйста, используйте правильную пунктуацию и правописание в своем общении.
Барт

Ответы:

77

Я написал об этом учебник некоторое время назад.

Самым важным моментом является «URL сайта»:

URL сайта: http: // localhost / app_name /

Где структура папок выглядит примерно так:

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

РЕДАКТИРОВАТЬ:
Кавья : как сервер FB распознает мой локальный хост даже без IP или порта ??

Я не думаю, что это имеет какое-либо отношение к Facebook, я думаю, поскольку srcпараметр iframe загружается со стороны клиента, он будет обрабатывать ваш локальный URL-адрес, как если бы вы поместили его прямо в свой браузер.

Например, на вашем онлайн-сервере есть файл с содержимым (например online.php):

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

И в корневом каталоге localhost есть файл test.php:

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

Теперь посетите, http://your_domain.com/online.phpвы увидите содержимое вашего файла localhost!

Вот почему подписки в реальном времени и деавторизованные обратные вызовы (просто упомянуть) не работают с URL-адресами localhost! потому что Facebook будет пинговать (отправлять http-запросы) на эти URL-адреса, но, очевидно, сервер Facebook не будет переводить эти URL-адреса на ваш!

ifaour
источник
Кажется, я не могу найти «URL-адрес сайта», где / или на какой вкладке он находится?
user962206 07
это работает для порта 8080? я все еще получаю ошибку с сайта URL: http://localhost:8080/auth/index.htmlи на веб - странице , который дает ошибку является http://localhost:8080/auth/index.htmlи channelurl линия:channelUrl : '//localhost:8080/auth/channel.html',
некромант
Я не понимаю, что такое «структура папок». Если вы просто входите на свой веб-сайт с помощью Facebook, чтобы загрузить комментарии Facebook на свою страницу, вам все еще нужна структура холста?
AlxVallejo
Есть несколько инструментов туннелирования, которые позволят вам дать вашему локальному хосту публичное имя и сделать его видимым, чтобы Facebook мог пинговать обратно. Я создал один под названием PageKite , есть и другие.
Bjarni Rúnar
29

если вы используете localhost:

в Facebook -> Настройки -> Основные, в поле «Домены приложений» напишите «localhost», затем нажмите «+ Добавить платформу» и выберите «Веб-сайт»,

он создаст два поля: «URL мобильного сайта» и «URL сайта», в «URL сайта» снова напишите «localhost».

работает для меня.

user3531155
источник
спасибо, я попробовал другие решения, но, наконец, это сработало,
rahulmishra
в поле Site Url у меня было: localhost , но не сработало Я также добавил localhost в поле App Domain, как вы упомянули, это отлично работает, спасибо
RegarBoy
23

Вы также можете отредактировать файл hosts и создать локальный вариант вашего домена.

пример

Если ваш реальный адрес приложения facebook - «example.com», вы можете создать домен «localhost.example.com» (доступный только с вашего компьютера) в своем файле «hosts», указывающий на «localhost», и запустить свой локальный веб-сайт в этом домене. Таким образом можно обмануть Facebook.

Матеуш Харитонюк
источник
1
работает как шарм, спасибо! FYI- хосты расположены на Windows 7 C:/Windows/System32/drivers/etc/hostsили на Ubuntu в/etc/hosts
pztrick
Отличная методология. Спасибо.
Jerad
Что мне установить для доменов приложений и URL-адреса холста?
Craig
Однако это не позволит вам указать порт, поэтому вам придется использовать обратный прокси-сервер, чтобы разрешить разработку в том же домене. См stackoverflow.com/questions/10729034/...
MagicLAMP
7

В основных настройках вашего приложения ( https://developers.facebook.com/apps ) в разделе Настройки-> Основные-> Выберите, как ваше приложение интегрируется с Facebook ...

Используйте «URL-адрес сайта:» и «URL-адрес мобильного сайта:» для хранения рабочих URL-адресов и URL-адресов разработки. Оба сайта смогут пройти аутентификацию. Я использую Facebook только для аутентификации, поэтому мне не нужны никакие функции перенаправления мобильного сайта. Обычно я меняю "URL мобильного сайта:" на свой сайт "localhost: 12345" во время тестирования аутентификации, а затем возвращаю его в нормальное состояние, когда закончу.

Картер Медлин
источник
6

2013 август. Facebook не позволяет устанавливать домен с портом для приложения, например «localhost: 3000».

Таким образом, вы можете использовать https://pagekite.net для перехода localhost:portна правильный домен.

Разработчики Rails могут использовать http://progrium.com/localtunnel/ бесплатно.

  • Facebook разрешает использовать только один домен для приложения одновременно. Если вы пытаетесь добавить еще один, как localhost, он покажет другую ошибку о домене. Убедитесь, что вы используете только один домен для обратного вызова и для настройки домена приложения одновременно.
Гедиминас
источник
4

Итак, я получил это работать сегодня. Мой URL-адрес http://localhost:8888. Домен, который я дал facebook, - localhost. Я думал, что это не работает, потому что я пытался получить данные с помощью этого FB.apiметода. Я продолжал получать "неопределенное" имя и изображение без источника, поэтому определенно не имел доступа к Графику.

Позже я понял , что моя проблема была на самом деле , что я только пропусканием первого аргумента /meк FB.api, и у меня не было знамение. Таким образом, вам нужно будет использовать FB.getLoginStatusфункцию для получения токена, который нужно добавить в /meаргумент.

Лоренцо Мангубат
источник
2

просто укажите URL-адрес вашего холста как http: // localhost / app_path .

JustCoding
источник
@ifaour я следил за вашим учебником .. это дает мне ошибку Код ошибки API: 191 Ошибка API Описание: Указанный URL не принадлежит приложению Сообщение об ошибке: redirect_uri не принадлежит приложению. Мне не нужно, чтобы он запускался внутри fb ...
восторженный
@Kavya просто добавьте URL-адрес холста как localhost / app_path и откройте приложение fb, чтобы оно запускало ваше приложение с localhost. Извините за опоздание, так как очень занято.
JustCoding
Другой способ сделать это - сопоставить URL-адрес вашего сайта / холста локально, а не указывать localhost. Затем вы можете использовать свой целевой домен. Я не уверен, на какой архитектуре вы разрабатываете, но в Windows вы бы достигли этого, настроив свой сайт IIS локально с правильными привязками, а затем добавив псевдоним в файл хостов в C: \ Windows \ System32 \ drivers \ etc например, добавление строки 127.0.0.1 yourproject.yourdomain.net
dumbledad
2

Хорошо, я не уверен, что случилось с этими ответами, но я дам вам знать, что сработало для меня, как посоветовал старший разработчик на моей работе. Я работаю в Ruby on Rails и использую код JavaScript Facebook для получения токенов доступа.

Проблема: для аутентификации Facebook берет URL-адрес из вашей адресной строки и сравнивает его с тем, что у них есть в файле. Они не позволяют вам использовать localhost:3000по какой-либо причине. Тем не менее, вы можете использовать полностью выдуманное доменное имя, например yoursite.dev, запустив локальный сервер и указав yoursite.devна него 127.0.0.1:3000или там, где указывал ваш localhost.

Шаг 1. Установите или обновите Nginx

$ brew install nginx(установить) или $ brew upgrade nginx(обновить)

Шаг 2. Откройте файл конфигурации nginx.

/usr/local/etc/nginx/nginx.conf (обычно здесь)

/opt/boxen/config/nginx/nginx.conf(если вы используете Boxen)

Шаг 3 Добавьте этот фрагмент кода в свой http {}блок

Замените proxy_passтам, где хотите указать yoursite.dev. В моем случае он заменял localhost: 3000 или аналогичный127.0.0.1:3000

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

Шаг 4. Отредактируйте файл hosts /etc/hostsна Mac, чтобы включить

127.0.0.1   yoursite.dev

Этот файл направляет домены на localhost. Nginx прослушивает localhost и перенаправляет, если он соответствует правилу.

Шаг 5 : Каждый раз, когда вы в дальнейшем используете среду разработки, вы используете yoursite.devв адресной строке вместо того, localhost:3000чтобы Facebook правильно входил в систему.

Алекс Левин
источник
1

Forward - отличный инструмент для локальной разработки приложений facebook, он поддерживает SSL, поэтому сертификат не проблема.

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

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: я один из разработчиков

взбесился
источник
1
А PageKite - один из конкурентов Forward (я его сделал!). ;-)
Bjarni Rúnar
Я попробовал все остальное под солнцем, и это сработало для меня. Единственная проблема в том, что вся эта пересылка очень медленная. Лучше, чем не получать обратные вызовы FB! Спасибо
Крейг
0

Вам необходимо настроить приложение для работы через https для localhost

Вы можете выполнить приведенные здесь шаги, чтобы настроить HTTPS на ubuntu.

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

Вам необходимо сделать следующие шаги:

установить apache (если у вас его нет)

sudo apt-get install apache2

Шаг 1. Активируйте модуль SSL

sudo a2enmod ssl
sudo service apache2 restart

Шаг второй - создание нового каталога

sudo mkdir /etc/apache2/ssl

Шаг 3. Создайте самоподписанный сертификат SSL

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

С помощью этой команды мы создадим самозаверяющий сертификат SSL и ключ сервера, который его защищает, и поместим их оба в новый каталог. Самая важная строка - «Общее имя». Введите здесь свое официальное доменное имя или, если у вас его еще нет, IP-адрес вашего сайта.

Общее имя (например, полное доменное имя сервера или ВАШЕ имя) []: example.com или localhost

Шаг четвертый - настройка сертификата

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

Найдите следующие строки и отредактируйте их со своими настройками

ServerName localhost или example.com

SSLEngine на SSLCertificateFile /etc/apache2/ssl/apache.crt

SSLCertificateKeyFile /etc/apache2/ssl/apache.key

Шаг пятый - активируйте новый виртуальный хост

sudo a2ensite default-ssl
sudo service apache2 reload
вакас
источник
0

Трюк:

Используйте MAMPPRO и создайте: имя сервера: ТОЧНЫЙ адрес вашего веб-сайта (например: helloworld.com) на вашем сайте на вашем диске

На Facebook: вы также можете сохранить исходный URL-адрес сайта (например, helloworld.com)

Теперь вы понимаете, что когда вы вводите свой веб-сайт в адресную строку, вы находитесь на местном уровне ! ..и когда вы хотите быть в сети, просто отключите сервер на MAMP PRO ..

:)

Себастьян Хорин
источник
0

Ни один из приведенных выше ответов не помог мне. Я использую FB API 2.5. У меня была комбинация проблем, которые после решения привели к успеху

  1. Создайте тестовое приложение, чтобы убедиться, что оно обслуживается и управляется как таковое и может быть отключено при запуске.
  2. Прочтите сообщение об ошибке как следует :) - Мне пришлось включить "Вход через Web OAuth" С "Входом клиента OAuth"
  3. Используйте https://www.whatismyip.com/, чтобы узнать мой текущий IP
  4. Создайте запись A в моем домене, то есть http://localhost.mydomain.com, которая указывает на мой текущий IP

Вероятно, это не идеально, как изменение динамического IP, и можно было бы использовать DynDNS или что-то подобное, чтобы сделать IP более «статическим», но у меня это сработало.

Корнелиус Паркин
источник
0

В моем случае проблема заключалась в том, что хром блокировал запрос CORS с localhost: 4200 на веб-сайт facebook api. Запуск Chrome с этим параметром: "YOUR_PATH_TO_CHROME \ Google \ Chrome \ Application \ chrome.exe" --disable-web-security --user-data-dir = "c: / chrome отлично работал при разработке. Даже без локального хоста добавлено в настройки приложения facebook.

номадев
источник
отлично работает для локальной разработки, но на производстве вам нужно разрешение facebook (которое получается с помощью вызова опции браузера) для обмена данными из facebook
radio_head