在本地主机上运行Facebook应用程序


92

我打算从我的本地主机连接到Facebook聊天。我将需要从Facebook获取会话密钥。当我提供网站网址为localhost:8080ip-address:8080不起作用时。

我读到有关使用两个不同的API密钥设置两个应用程序的信息,一个在dev m / c上运行,另一个在localhost上运行,但我不太了解。

谁能解释如何在本地主机上运行Facebook应用程序?


@Kavya您是否要创建桌面Facebook聊天应用程序?
Searock

是的...我想从我的m / c中访问facebook服务器...在这里看到了关于同一文章的信息stackoverflow.com/questions/1877913 / ... 我会得到它
热情的

@Kavya如果要创建一种语言,您还没有提到要使用的编程语言?
Searock

2
我已经写了一个关于这个的教程
ifaour 2011年

5
@xoxoxo请在您的通讯中使用正确的标点符号和拼写。
巴特

Answers:


77

我前一阵子写了一个关于这个的教程

最重要的一点是“站点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

编辑:
Kavya即使没有IP或端口,FB服务器如何识别我的本地主机?

我认为这与Facebook没有任何关系,我由于iframe src参数是从客户端加载的,因此它将把您的本地URL视为直接将其放在浏览器中。

例如,在您的在线服务器上有一个包含内容的文件(例如online.php):

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

在本地主机根目录上,有以下文件test.php

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

现在访问,http://your_domain.com/online.php您将看到本地主机文件的内容!

这就是为什么实时订阅和取消授权回调(仅提及)不适用于本地主机URL的原因!因为Facebook会ping(发送http请求)到这些URL,但是显然Facebook服务器不会将这些URL转换为您的URL!


我似乎找不到“站点网址”的任何想法,它位于哪里/或位于哪个选项卡?
user962206

对8080端口有效吗?我仍然收到网站网址错误:http://localhost:8080/auth/index.html和给出错误的网页是http://localhost:8080/auth/index.html,而channelurl行是:channelUrl : '//localhost:8080/auth/channel.html',
necromancer

我不了解“文件夹结构”部分。如果您只是使用Facebook登录到您的网站以在页面上加载Facebook评论,您是否仍需要该画布结构?
AlxVallejo 2013年

有一些隧道工具可让您为本地主机提供一个公共名称并使其可见,以便Facebook可以回溯。我创建了一个名为PageKite的文件,还有其他文件。
BjarniRúnar'13

29

如果您使用本地主机:

在Facebook->设置->基本中,在“应用程序域”字段中输入“ localhost”,然后单击以“ +添加平台”选择“网站”,

它将创建两个字段“ Mobile Site URL”和“ Site URL”,在“ Site URL”中再次写入“ localhost”。

为我工作。


谢谢,我尝试了其他解决方案,但最终这是
可行的

在Site Url字段中,我拥有:localhost ,但没有工作我也将localhost添加到App Domain字段中,正如您所提到的,这很好用
RegarBoy 2016年

23

您还可以编辑“主机”文件并创建域的本地变体。

如果您的真实Facebook应用程序地址为“ example.com”,则可以在指向“ localhost”的“主机”文件中创建“ localhost.example.com”(仅可从您的pc访问)域,并在此域下运行本地网站。您可以通过这种方式欺骗Facebook。


1
就像魅力一样,谢谢!FYI-主机位于Windows 7 C:/Windows/System32/drivers/etc/hosts或Ubuntu上,位于/etc/hosts
pztrick

优秀的方法论。谢谢。
Jerad 2014年

将应用程序域和画布URL设置为什么?
Craig

但是,这将不允许您指定端口,因此必须使用反向代理才能在同一域上进行开发。见stackoverflow.com/questions/10729034/...
MagicLAMP

7

在应用程序的基本设置(https://developers.facebook.com/apps)中的设置->基本->选择应用程序如何与Facebook集成...

使用“站点URL:”和“移动站点URL:”来保存您的生产和开发URL。两个站点都将被允许进行身份验证。我只是使用Facebook进行身份验证,因此不需要任何移动网站重定向功能。我通常在测试身份验证时将“移动站点URL:”更改为我的“ localhost:12345”站点,然后在完成后将其设置回正常。


6

2013年8月。Facebook不允许为应用程序设置端口域,例如“ localhost:3000”。

因此,您可以使用https://pagekite.net来隧穿您的localhost:port到正确的域。

Rails开发人员可以免费使用http://progrium.com/localtunnel/

  • Facebook当时仅允许一个域用于App。如果您要添加另一个本地主机,它将显示有关域的某种不同错误。务必同时使用一个域进行回调和应用程序域设置。

4

所以我今天就开始工作。我的网址是http://localhost:8888。我给Facebook的域名是本地主机。我以为那是行不通的,因为我试图使用FB.api方法。我不断获得“未定义”的名称和没有源的图像,因此绝对无法访问Graph。

后来我意识到我的问题确实是我只传递了/meto 的第一个参数FB.api,而我没有令牌。因此,您需要使用该FB.getLoginStatus函数来获取令牌,该令牌应添加到/me参数中。


2

只需将您的画布网址指定为http:// localhost / app_path即可


@ifaour我已完成您的教程。.它给我错误API错误代码:191 API错误描述:指定的URL不归应用程序所有错误消息:redirect_uri不归应用程序所有。我不需要它在fb内运行...
热情的

@Kavya只是将画布URL添加为localhost / app_path并打开fb app,所以它将从localhost运行您的应用程序。抱歉,很忙。
JustCoding 2011年

执行此操作的另一种方法是在本地映射站点/画布URL,而不是指定localhost。然后,您可以使用目标域。我不确定您正在开发哪种体系结构,但是在Windows下,您可以通过使用正确的绑定在本地设置IIS站点,然后在C:\ Windows \ System32 \ drivers \ etc中为主机文件添加别名来实现此目的例如,添加行127.0.0.1 yourproject.yourdomain.net
dumbledad 2012年

2

好的,我不确定这些答案的内容,但是我会让您知道在我的工作中一位资深开发人员建议的对我有用的方法。我正在Ruby on Rails中工作,并使用Facebook的JavaScript代码获取访问令牌。

问题:为了进行身份验证,Facebook从您的地址栏中获取了该URL,并将其与文件中的URL进行比较。它们不允许您localhost:3000出于任何原因使用。但是,你可以使用一个完全虚构的域名如yoursite.dev通过运行一个本地服务器,并指向yoursite.dev127.0.0.1:3000或任何本地主机被指向。

步骤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步/etc/hosts在Mac上,编辑主机文件以包括

127.0.0.1   yoursite.dev

该文件将域定向到本地主机。Nginx监听本地主机,并在匹配规则时重定向。

步骤5:以后每次使用开发环境时,请yoursite.dev在地址栏中使用,而不是localhost:3000让Facebook正确登录。



0

您需要设置您的应用程序以在本地主机的https上运行

您可以按照此处给出的步骤在ubuntu上设置HTTPS

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

您需要执行以下步骤:

安装apache(如果没有)

sudo apt-get install apache2

第一步-激活SSL模块

sudo a2enmod ssl
sudo service apache2 restart

第二步-创建新目录

sudo mkdir /etc/apache2/ssl

第三步-创建自签名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地址。

公用名(例如服务器FQDN或您的姓名)[]:example.com或localhost

第四步-设置证书

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

查找以下行并使用您的设置进行编辑

ServerName本地主机或example.com

SSLCertificateFile /etc/apache2/ssl/apache.crt上的SSLEngine

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. 在我的域(即http://localhost.mydomain.com)上创建一个指向我当前IP 的A记录

由于动态IP的更改,它可能并不理想,并且可能使用DynDNS或类似方法使IP更“静态”,但它对我有用


0

在我的情况下,问题表明是Chrome阻止了从localhost:4200到facebook api网站的CORS请求。使用以下设置运行Chrome:“ YOUR_PATH_TO_CHROME \ Google \ Chrome \ Application \ chrome.exe” --disable-web-security --user-data-dir =“ c:/ chrome在开发时就像一个魅力。即使没有本地主机已添加到Facebook应用的设置。


对于本地开发工作正常,但是在生产中,您需要Facebook的许可(通过浏览器的选项调用获得许可)才能从Facebook共享数据
radio_head
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.