繁体   English   中英

我怎么知道我的应用程序正在Facebook内运行

[英]How do I know my app is being Run inside Facebook

如果我有一个应用程序,它在Facebook内运行。 第一次加载我会得到的

$_REQUEST['signed_request'] 

但如果你点击我的应用程序内的任何链接并在应用程序中导航,你将失去$_REQUEST['signed_request']

有没有其他方法可以知道我的应用程序是在浏览器中运行还是在Facebook内运行?

您可以继续传递signed_request 在您的应用程序中,您的所有链接应以?signed_request=<whatever> (或者如果已存在查询字符串,则为&signed_request=<whatever> ),并且所有POST表单都应包含signed_request作为隐藏输入。 然后,您将始终可以访问signed_request

您可以在php会话中保存signed_request的值,如下所示:

session_start();
if (isset($_REQUEST['signed_request'])){
  $_SESSION['signed_request'] = $_REQUEST['signed_request'];
}

稍后您可以检查session_request值是否保存在会话中:

if (isset($_SESSION['signed_request'])){
  //do something
}

如果您真的只需要知道您的应用程序是否通过Facebook访问,最简单的方法是在您的应用程序设置中使用唯一的URL - 或者像fb.yoursite.com这样的唯一主机名,或者像www这样的唯一目录名。 yoursite.com/fbapp/。 然后配置服务器,使唯一的主机名/目录指向与常规主机名/目录相同的位置。 这样可以通过任何一种方式访问​​相同的文件,但是您的脚本可以检查$ _SERVER信息以判断它是否是Facebook请求。

但是......除非你严格处理非授权访问,否则你必须考虑这是否能解决任何问题。 如果你必须“检测”这样的事情,你不能携带任何持久的状态信息,并且你的用户一旦进入第2页就会失去他的“身份”。所以很可能,你需要考虑的是不是在每个页面上告诉用户是否在Facebook中的方式,而是在第一页上解析您需要的所有信息然后在所有其他页面中使用的方法。 许多人使用PHP会话。 就个人而言,我认为这是一个坏主意,并且会做更像Ben在他的回答中提出的建议(使用GET和POST来传递你需要的信息)。

就个人而言,我使用的一个非常简单但有效的解决方案是一些客户端javascript(显然可以禁用等) - 这很适用于简单的重定向,并且它不适用于所有情况。

// Redirect if the page is not an iframe
if (window.location == window.parent.location){
    window.top.location = '{{ facebook_tab_url }}';
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM