可口可乐似乎已经很好地钉了它。甚至在任何用户互动之前,他们都会设法知道您在their Facebook page的位置:
这适用于IE,因此不涉及HTML5(毕竟,Facebook无法识别Javascript中的navigator
对象。)
他们是如何做到的?
答案 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,你还必须处理字段为空的情况,因为你可能没有世界上每个国家的内容。)
答案 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