我该如何在开发Facebook Graph网站时使用本地主机?

12

我希望在使用Facebook Graph API开发网站的时候能够使用本地主机(localhost)。我使用的是ASP.NET C#。

在之前的Facebook API中,我可以在应用程序设置中的连接URL中写入http://localhost:4300/

现在却不起作用了。它一直告诉我:“应用程序名称发生错误,请稍后再试。”

有什么建议吗?

** 如果我上传网站并使用网站连接URL,则可以正常工作。

7个回答

21
Facebook不关心你的服务器实际IP地址在哪里,但它会检查引用页面的域名与你在Facebook注册的域名是否相同。在开发过程中让其正常工作的诀窍是找到一种方式,在本地机器上进行开发时仍然使用你的域名。
如果你完全控制DNS记录,那么可以添加一个主机记录(例如'test.yourdomain.com'),它可以指向你的开发机器的真实IP地址(如果它是静态IP),或者只是指向127.0.0.1。
如果你无法访问DNS,则在开发过程中解决此问题最简单的方法是将Facebook注册的域名指向你本地主机机器的hosts文件('/etc/hosts'在OSX和大多数其他Unix机器上)。因此,你需要像这样添加一行:
127.0.0.0 test.yourdomain.com

将内容添加到您的hosts文件末尾。这意味着,如果您现在在Web浏览器中输入test.yourdomain.com,则会解析为本地计算机。

现在,在Facebook应用程序设置的“网站”部分中,请确保将您的域名添加到设置的“站点域”部分 - 这将意味着Facebook将接受来自您域名的任何子域的请求 - 换句话说,它将接受来自“www.yourdomain.com”(您的生产服务器)和“test.yourdomain.com”(您的本地开发计算机)的请求。

现在,您只需在浏览器中使用“test.yourdomain.com” URL而不是'localhost'即可在本地计算机上进行开发,并且一切都应该正常工作。

哦,还有一件事 - 如果您的开发服务器未在端口80上运行,则Facebook重定向URI也将需要具有端口号,但它包括此端口号来匹配域名URL(坦白地说,我认为这是Facebook API中的错误)。这意味着,如果您的开发服务器(例如)在端口8080上运行,则需要在重定向URI中的主机名后面添加“:8080”,但是如果您的生产服务器在端口80上运行,则不应在重定向URI中放置“:80”,因为否则它只能在人们明确包含端口号的URL中使用来查看您的页面(在生产服务器中不太可能)。实际上,这意味着您只需有一个条件,以便在生成Facebook身份验证URL时仅在没有端口80时包括端口号。


好主意 - 为什么我没想到呢?我只是修改了Hosts文件,它完美地工作了。 - Mathias Lykkegaard Lorenzen
非常感谢!这就是解决痛苦的“应用程序配置不允许给定的URL:一个或多个给定的URL不被应用程序的设置所允许。它必须匹配网站URL或画布URL,或者域名必须是应用程序域名的子域。”信息的方法。我完整地引用它,以便在搜索修复方法时人们可以轻松地找到这个答案。 - Phil L.
在 Facebook 应用程序设置中,在应用程序域下,我列出了 local.app.com:3000 和 app.com 两个域名。这样做是有效的。 - Ken

3
将“localhost”添加到Facebook应用程序的“应用域”设置中。此外,如果您正在执行将“MyApp.test”重定向到本地服务器上的127.0.0.1之类的操作,则还可以将“MyApp.test”添加到“应用域”,这样它也可以工作。
在寻找解决此问题的方法后,我尝试了这个非常简单的解决方案。

2
请检查您应用程序的Facebook配置中的以下基本设置:
  • 已设置命名空间
  • 应用程序域包括“localhost”
  • Canvas URL和Secure Canvas URL在其URL中都具有“localhost”域
如果在保存应用程序的配置设置时出现“应用程序名称”错误,您确定应用程序的名称有效且尚未被使用吗?我们经常使用localhost(使用ASP.Net、IISExpress和非常高的端口号)与四五个不同的应用程序和不同机器上的多个用户,从未需要执行其他一些人在答案中描述的额外步骤。
编辑:重新阅读其他答案后,我想有些开发人员正在为生产使用的同一个Facebook应用程序进行开发,因此他们需要将自己的计算机映射到生产域?我们不这样做,我们有两个“应用程序”。一个是带有localhost配置的测试,另一个是生产。我们有一个组件,在运行时确定它所在的环境,并构造所有必要的URL,例如OAuth重定向与应用程序ID和应用程序密钥,因此我们始终运行相同的代码,只是在不同的服务器上部署了不同的配置。

0

您确定问题与 Web 服务器的 DNS 名称和/或端口有关吗? 如果是,您可以使用本地 IIS 而不是 webdev 服务器,配置一个名为 yourdomain.com 的网站,并向 hosts 添加一个条目,内容为 127.0.0.1 yourdomain.com


0
如果我理解你所尝试做的事情并且应用程序设置在Facebook网站上,那么Facebook将无法使用“localhost”连接到你的计算机。请获取你计算机的IP地址,并将其输入到应用程序设置页面中。
要查找你的IP地址:http://whatismyipaddress.com/

0

你需要创建一个从开发服务器到本地计算机的SSH隧道。每个发送到开发服务器的请求都将由你的计算机处理并返回。


0

你不能在 Facebook 设置中添加顶级域名,供参考。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接