1

我使用 PHP SDK 开发了一个 facebook 粉丝页面应用程序并成功运行它。我实现了一个 Fan Gate,即用户必须喜欢该页面才能使用该应用程序。

直到现在我才能解决的是:我想阻止我的应用程序在 Facebook iframe 之外运行。到目前为止,当用户复制并粘贴 URL(iframe src 的)时,我的应用程序可以在新的浏览器选项卡或窗口中运行。在这一点上,我想给出一条错误消息,例如“此应用程序只能在 Facebook 选项卡中运行”。

我正在捕获signed_request,但由于我的应用程序有子页面和例程,我必须将signed_request 存储在会话变量中。

有什么建议吗?

4

1 回答 1

0

好的,所以我通常做的是在app_data字段中提供数据signed_request以知道要加载哪个页面。发布时,我在处理有效负载后直接重定向到选项卡。

因此,有两种方法可以请求一个页面,即实际上是一个 facebook 选项卡:GET 和 POST。

得到

使用 GET 时,应始终使用 facebook URL 请求选项卡。例如:标签的子页面“表单”应该有一个类似的 URL:http://www.facebook.com/pages/xXx/[page_id]?sk=app_[app_id]&app_data=form

在您的服务器端代码中,您app_data在解码后识别数据signed_request(参见12)。在指向表单页面的链接中,您还必须添加target="parent"属性。这样,facebook 会重新加载,并且标签感觉比直接链接子页面时要慢。但是您有标识子页面的 URL,这是我们更喜欢的。此外,您可以期望每个 GET 请求都有一个signed_request. 如果没有,则不会通过 facebook 调用它,您可以显示错误消息,或者按照我的建议,重定向到您的选项卡(子页面)。

邮政

POST 永远不会有signed_request. 但通常,在冲浪时,浏览器使用 GET 请求。所以你可以假设,如果你收到一个 POST 请求,它要么来自你自己的表单,要么来自黑客攻击。在这两种情况下,您都要检查该请求的值是否有效。

如果它们有效,则将它们保存到数据库并重定向到“成功”页面。例如,如果您准备参加比赛,您应该显示一个页面,以确保用户他/她已成功参与。

如果数据无效,则将错误消息保存到会话中并重定向回显示它们的表单。

我总是建议您在 POST 请求后重定向,无论您是否在 Facebook 选项卡中。但在 facebook 选项卡中,必须使用 javascript 完成重定向,因为它位于 IFRAME 中,并且您希望重新加载整个页面:

<script type="text/javascript">
    parent.location.href = 'http://www.facebook.com/pages/xXx/[page_id]?sk=app_[app_id]&app_data=form';
</script>

Post scriptum 1:对我来说,表单总是使用 POST 请求。

Post scriptum 2:如果您不喜欢每次点击都重新加载整个 facebook“框架”的想法,您可以考虑做一些 AJAX 魔术,在请求中“添加”额外数据,以便您将它们识别为“你的”。

于 2013-05-10T17:49:20.837 回答