Ejecutando la aplicación de Facebook en localhost

92

Estoy planeando conectarme al chat de Facebook desde mi localhost. Necesitaré obtener la clave de sesión de Facebook. Cuando le doy a la URL del sitio como localhost:8080o ip-address:8080no funciona.

Leí sobre la configuración de dos aplicaciones con 2 claves API diferentes, una se ejecuta en dev m / cy otra en localhost, pero no lo entendí del todo.

¿Alguien puede explicar cómo ejecutar una aplicación de Facebook en localhost?

entusiasta
fuente
@Kavya ¿Estás intentando crear una aplicación de chat de Facebook de escritorio?
Searock
sí ... quiero acceder al servidor de Facebook desde mi m / c ... vi una publicación sobre lo mismo aquí stackoverflow.com/questions/1877913/… lo entiendo ...
entusiasta
@Kavya Si quieres crear uno, no has mencionado el lenguaje de programación, ¿cuál vas a utilizar?
Searock
2
Escribí un tutorial sobre eso.
ifaour
5
@xoxoxo Utilice la puntuación y la ortografía adecuadas en su comunicación.
Bart

Respuestas:

77

Escribí un tutorial sobre esto hace un tiempo.

El punto más importante es la "URL del sitio":

URL del sitio: http: // localhost / app_name /

Donde la estructura de la carpeta es algo como:

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

EDITAR:
Kavya : ¿cómo reconoce el servidor FB mi localhost incluso sin una IP o puerto?

No creo que esto tenga nada que ver con Facebook, supongo que dado que el srcparámetro iframe se carga desde el lado del cliente, tratará su URL local como si la pusiera directamente en su navegador.

Por ejemplo, tenga un archivo en su servidor en línea con contenido (p online.php. Ej. ):

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

Y en su directorio raíz localhost, tenga el archivo test.php:

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

¡Ahora visite http://your_domain.com/online.phpy verá el contenido de su archivo localhost!

¡Esta es la razón por la que las suscripciones en tiempo real y las devoluciones de llamada desautorizadas (solo por mencionar) no funcionarán con las URL de localhost! porque Facebook hará ping (enviará solicitudes http) a estas URL, pero obviamente el servidor de Facebook no traducirá esas URL a las suyas.

ifaour
fuente
Parece que no puedo encontrar la "URL del sitio" ni idea de dónde / o qué pestaña se encuentra?
user962206
¿Funciona esto para el puerto 8080? Sigo recibiendo el error con la URL del sitio: http://localhost:8080/auth/index.htmly la página web que da el error es http://localhost:8080/auth/index.htmly la línea channelurl es:channelUrl : '//localhost:8080/auth/channel.html',
nigromante
No entiendo la parte de la "estructura de carpetas". Si simplemente está iniciando sesión en su sitio web con Facebook para cargar comentarios de Facebook en su página, ¿aún necesita esa estructura de lienzo?
AlxVallejo
Hay algunas herramientas de tunelización que le permitirán darle un nombre público a su host local y hacerlo visible, para que Facebook pueda devolver el ping. Creé uno, llamado PageKite , también hay otros.
Bjarni Rúnar
29

si usa localhost:

en Facebook -> Configuración -> Básico, en el campo "Dominios de la aplicación" escriba "localhost", luego haga clic en "+ Agregar plataforma", elija "Sitio web",

creará dos campos "URL del sitio móvil" y "URL del sitio", en "URL del sitio" escriba nuevamente "localhost".

funciona para mi.

usuario3531155
fuente
gracias, probé las otras soluciones, pero finalmente esta fue la que funcionó,
rahulmishra
en el campo de URL del sitio tenía: localhost , pero no funcionó. También agregué localhost al campo de dominio de la aplicación como mencionaste, esto funciona bien gracias
RegarBoy
23

También puede editar el archivo 'hosts' y crear una variación local de su dominio.

Ejemplo

Si la dirección real de su aplicación de Facebook es "example.com", puede crear el dominio "localhost.example.com" (accesible solo desde su PC) en su archivo "hosts" apuntando a "localhost" y ejecutar su sitio web local bajo este dominio. Puedes engañar a Facebook de esta manera.

Mateusz Charytoniuk
fuente
1
funciona como un encanto, gracias! FYI: los hosts se encuentran en Windows 7 en C:/Windows/System32/drivers/etc/hostso en Ubuntu en/etc/hosts
pztrick
Excelente metodología. Gracias.
Jerad
¿En qué configuro los dominios de la aplicación y la URL del lienzo?
Craig
Sin embargo, esto no le permitirá especificar el puerto, por lo que tendría que usar un proxy inverso para permitir el desarrollo en el mismo dominio. Ver stackoverflow.com/questions/10729034/…
MagicLAMP
7

En la configuración básica de su aplicación ( https://developers.facebook.com/apps ) en Configuración-> Básico-> Seleccione cómo se integra su aplicación con Facebook ...

Utilice "URL del sitio:" y "URL del sitio móvil:" para guardar sus URL de producción y desarrollo. Ambos sitios podrán autenticarse. Solo estoy usando Facebook para la autenticación, por lo que no necesito ninguna de las funciones de redirección de sitios móviles. Por lo general, cambio la "URL del sitio móvil:" a mi sitio "localhost: 12345" mientras estoy probando la autenticación, y luego vuelvo a la normalidad cuando termino.

Carter Medlin
fuente
6

2013 agosto. Facebook no permite configurar un dominio con puerto para una aplicación, como por ejemplo "localhost: 3000".

Por lo tanto, puede usar https://pagekite.net para acceder localhost:portal dominio adecuado.

Los desarrolladores de Rails pueden utilizar http://progrium.com/localtunnel/ de forma gratuita.

  • Facebook solo permite un dominio para la aplicación a la vez. Si está intentando agregar otro, como localhost, mostrará algún tipo de error diferente sobre el dominio. Asegúrese de usar solo un dominio para la devolución de llamada y para la configuración del dominio de la aplicación en ese momento.
Gediminas
fuente
4

Así que hice que esto funcionara hoy. Mi URL es http://localhost:8888. El dominio que le di a Facebook es localhost. Pensé que no estaba funcionando porque estaba tratando de extraer datos usando el FB.apimétodo. Seguí obteniendo un nombre "indefinido" y una imagen sin fuente, por lo que definitivamente no tenía acceso al gráfico.

Más tarde me di cuenta de que mi problema era en realidad que solo estaba pasando un primer argumento de /meto FB.apiy no tenía un token. Por lo tanto, deberá usar la FB.getLoginStatusfunción para obtener un token, que debe agregarse al /meargumento.

Lorenzo Mangubat
fuente
2

simplemente especifique su URL de lienzo como http: // localhost / app_path .

JustCoding
fuente
@ifaour seguí tu tutorial ... me está dando el error Código de error de API: 191 Descripción del error de API: La URL especificada no es propiedad de la aplicación Mensaje de error: redirect_uri no es propiedad de la aplicación. No necesito que se ejecute dentro de Facebook ...
entusiasta
@Kavya solo agrega la URL del lienzo como localhost / app_path y abre la aplicación fb, por lo que ejecutará tu aplicación desde localhost. Lo siento por tarde, ya que está muy ocupado.
JustCoding
Otra forma de hacer esto es mapear la URL de su sitio / lienzo localmente, en lugar de especificar localhost. A continuación, puede utilizar su dominio de destino. No estoy seguro de en qué arquitectura está desarrollando, pero en Windows lo lograría configurando su sitio IIS localmente con los enlaces correctos y luego agregando un alias a su archivo de hosts en C: \ Windows \ System32 \ drivers \ etc por ejemplo, agregando la línea 127.0.0.1 yourproject.yourdomain.net
dumbledad
2

Ok, no estoy seguro de qué pasa con estas respuestas, pero le haré saber lo que funcionó para mí según lo aconsejado por un desarrollador senior en mi trabajo. Estoy trabajando en Ruby on Rails y usando el código JavaScript de Facebook para obtener tokens de acceso.

Problema: para realizar la autenticación, Facebook toma la URL de su barra de direcciones y la compara con lo que tiene en el archivo. No te permiten usarlos localhost:3000por cualquier motivo. Sin embargo, puede utilizar un nombre de dominio completamente inventado, yoursite.devpor ejemplo, ejecutando un servidor local y apuntando yoursite.devhacia 127.0.0.1:3000o hacia donde apuntaba su host local .

Paso 1 : instala o actualiza Nginx

$ brew install nginx(instalar) o $ brew upgrade nginx(actualizar)

Paso 2 : abre tu archivo de configuración nginx

/usr/local/etc/nginx/nginx.conf (generalmente aquí)

/opt/boxen/config/nginx/nginx.conf(si usa Boxen)

Paso 3 Agrega este código en tu http {}bloque

Reemplácelo proxy_passcon el lugar al que desee señalar yoursite.dev. En mi caso estaba reemplazando localhost: 3000 o el equivalente127.0.0.1:3000

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

Paso 4 : Edite su archivo de hosts, en /etc/hostsMac para incluir

127.0.0.1   yoursite.dev

Este archivo dirige los dominios a localhost. Nginx escucha en localhost y redirige si coincide con una regla.

Paso 5 : Cada vez que use su entorno de desarrollo en el futuro, use yoursite.deven la barra de direcciones en lugar de localhost:3000para que Facebook lo registre correctamente.

Alex Levine
fuente
1

Forward es una gran herramienta para ayudar con el desarrollo de aplicaciones de Facebook localmente, es compatible con SSL, por lo que el certificado no es un problema.

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

DESCARGO DE RESPONSABILIDAD: Soy uno de los desarrolladores

resplandeció
fuente
1
Y PageKite es uno de los competidores de Forward (¡lo logré!). ;-)
Bjarni Rúnar
Después de probar todo lo demás bajo el sol, esto funcionó para mí. El único problema es que todo ese reenvío es realmente lento. ¡Sin embargo, es mejor que no recibir devoluciones de llamada de FB! Gracias
Craig
0

Necesita configurar su aplicación para que se ejecute sobre https para localhost

Puede seguir los pasos dados en esto para configurar HTTPS en ubuntu

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

Debe seguir los siguientes pasos:

instalar apache (si no lo tiene)

sudo apt-get install apache2

Paso uno: active el módulo SSL

sudo a2enmod ssl
sudo service apache2 restart

Paso dos: crear un directorio nuevo

sudo mkdir /etc/apache2/ssl

Paso tres: cree un certificado SSL autofirmado

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

Con este comando, crearemos el certificado SSL autofirmado y la clave del servidor que lo protege, y colocaremos ambos en el nuevo directorio. La línea más importante es "Nombre común". Ingrese su nombre de dominio oficial aquí o, si aún no tiene uno, la dirección IP de su sitio.

Nombre común (por ejemplo, servidor FQDN o SU nombre) []: ejemplo.com o localhost

Paso cuatro: configurar el certificado

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

Encuentra las siguientes líneas y edítalas con tu configuración

ServerName localhost o ejemplo.com

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

SSLCertificateKeyFile /etc/apache2/ssl/apache.key

Paso cinco: active el nuevo host virtual

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

Un truco:

Utilice MAMPPRO y cree: nombre del servidor: la dirección EXACTA de su sitio web (por ejemplo: helloworld.com) a su sitio en su disco

En Facebook: para que también pueda mantener la URL del sitio original (por ejemplo: helloworld.com)

¡Ahora entiende que cuando escribe su sitio web en la barra de direcciones, está en local ! .. y cuando quiera estar en línea, simplemente inactive el servidor en MAMP PRO ..

:)

Sebastien Horin
fuente
0

Ninguna de las respuestas anteriores funcionó para mí. Estoy ejecutando FB API 2.5. El mío fue una combinación de problemas que conducen al éxito una vez resueltos

  1. Cree una aplicación de prueba para asegurarse de que se mantenga y administre como tal y que pueda deshabilitarse cuando se active
  2. Lea el mensaje de error correctamente :) - Tuve que habilitar "Inicio de sesión de Web OAuth" CON "Inicio de sesión de OAuth de cliente"
  3. Utilice https://www.whatismyip.com/ para averiguar cuál es mi IP actual
  4. Crear un registro A en mi dominio, es decir, http://localhost.mydomain.com que apunte a mi IP actual

Probablemente no sea ideal ya que el cambio de IP dinámica y probablemente se podría usar DynDNS o algo similar para hacer que la IP sea más "estática", pero funcionó para mí.

Cornelius Parkin
fuente
0

En mi caso, el problema reveló que Chrome bloquea la solicitud CORS de localhost: 4200 al sitio web de la API de Facebook. Ejecutar Chrome con esta configuración: "YOUR_PATH_TO_CHROME \ Google \ Chrome \ Application \ chrome.exe" --disable-web-security --user-data-dir = "c: / chrome funcionó de maravilla durante el desarrollo. Incluso sin localhost agregado a la configuración de la aplicación de Facebook.

nomadev
fuente
funciona bien para el desarrollo local, pero en producción necesita el permiso de Facebook (que se obtiene mediante la llamada de opción del navegador) para compartir datos de Facebook
radio_head