在Facebook页面选项卡上获取用户位置

时间:2011-01-06 14:56:22

标签: javascript facebook geolocation fbml

可口可乐似乎已经很好地钉了它。甚至在任何用户互动之前,他们都会设法知道您在their Facebook page的位置:

You're in Denmark, dude. Chill.

这适用于IE,因此不涉及HTML5(毕竟,Facebook无法识别Javascript中的navigator对象。)

他们是如何做到的?

4 个答案:

答案 0 :(得分:4)

首先,我不认为可以使用javascript完成。以下是使用服务器端语言(如PHP)的方法。

如果您仔细查看您提供的页面(可口可乐登陆标签),即使用户未使用Facebook登录,您也可以看到该国家/地区的选择有效。

当您设置Facebook应用程序时,您可以提供标签网址。这是相对于您的画布URL的地址,当您的应用程序添加到页面(在选项卡内)时,facebook会从该地址提供内容。

如果你执行$ _SERVER超全局变量的var_dump,你会看到一个名为HTTP_X_FB_USER_REMOTE_ADDR的变量。这是相应用户的IP地址。获得用户IP地址后,您可以轻松使用地理定位服务查找国家:)。

祝你好运!

稍后修改

似乎我所谈论的变量在标签内不可用。我刚做了一些测试,无论用户是否已登录,您总是拥有名为fb_sig_country的POST变量,该变量是用户所在国家/地区的顶级域名。

答案 1 :(得分:2)

通过Facebook的app api我相信他们能够获得用户的IP地址,然后进行地理IP查找。或Facebook提供api电话,告诉他们哪个国家。


修改
来自http://developers.facebook.com/docs/guides/canvas

  

为了创建个性化用户   经验, Facebook发送你的   有关的申请信息   user。此信息将传递给   您的Canvas URL使用HTTP POST   单个signed_request参数   其中包含base64url编码   JSON对象。

     

当用户首次访问您的应用时,   signed_request参数包含   有限数量的用户数据。在   为了获得对所有用户的访问权限   您可以获得的信息   默认应用程序(如   用户的Facebook ID),用户必须   授权您的申请。 Facebook的   提供了许多不同的方法   处理授权范围   登录按钮以手动执行   Web服务器上的OAuth2.0流程。

     

<强>&GT;包含语言环境和的JSON数组   当前用户的国家/地区。该   地区和国家总是如此   可用。

您可以获得有关用户,他们的区域设置和国家/地区的有限信息,并且只有在他们授权应用程序之后,您才能获得默认信息。

答案 2 :(得分:1)

你可以通过PHP

找到这个

$country = $_POST['fb_sig_country']

  

使用自定义标签的开发人员可以利用我们新的* fb_sig_country *请求标头,根据用户的区域设置显示不同的内容。例如,如果您的应用程序使用自定义选项卡显示最新的世界杯排名,则可以使用fb_sig_country显示用户所在国家/地区的精彩集锦。 (注意:如果你使用fb_sig_country,你还必须处理字段为空的情况,因为你可能没有世界上每个国家的内容。)

通过http://developers.facebook.com/blog/post/394

答案 3 :(得分:0)

Facebook在签名请求的用户部分中传递当前用户的国家/地区和区域设置。请在此处阅读:https://developers.facebook.com/docs/authentication/signed_request/

如果你有一个iframe应用程序(现在需要,所以你很可能这样做),也可以使用普通的geo-ip方法。 MaxMind提供基于javascript的检测以及在服务器端使用的数据库。如果您在应用程序的某个位置包含一个返回maxmind.com的链接,则它是免费的。 http://www.maxmind.com/app/javascript_city