facebook将应用程序从画布页面重定向到粉丝页面

Posted

技术标签:

【中文标题】facebook将应用程序从画布页面重定向到粉丝页面【英文标题】:facebook redirect app from canvas page to fan page 【发布时间】:2011-08-08 13:13:45 【问题描述】:

我正在将 facebook 应用程序构建为粉丝页面中的 iframe 应用程序。我现在的问题是下一个:我添加了 facebook 请求对话框(http://developers.facebook.com/docs/reference/dialogs/requests),一切都很顺利,除了一件事:当用户收到通知时,链接转到画布页面,而不是粉丝页面(我想去的地方......)

由于我无法说服 facebook 添加一些功能(那会很棒),我正在寻找一种方法来自动从应用程序画布页面重定向到粉丝页面,该应用程序被添加为 iframe 选项卡。

我希望有人明白我想做什么...... :)

谢谢,彼得

【问题讨论】:

【参考方案1】:

如果我理解正确,你可以这样做:

top.location.href='http://www.facebook.com/YOUR_PAGE_NAME?sk=app_YOUR_APP_ID'

或者您可以使用标头重定向到该网址。这将重定向到您的粉丝页面上的应用程序选项卡。

【讨论】:

我遇到了同样的问题,我想知道你们是如何检测到您在应用页面而不是画布 URL 上的。如何防止无限重定向循环? @迈克尔。好吧,你通常把tab url和page url分开,或者在应用程序设置中添加一个GET参数来知道调用了哪个页面。 @DannyKK。谢谢你的提示。我找到了另一种方法来执行此操作,而无需设置 GET 变量。您还可以检查 $_SERVER['HTTP_REFERER'] 变量以查看 apps.facebook.com 是否存在。 是的,我也这样做。但我现在面临另一个问题:当我在 HTTP_REFERER 中有 apps.facebook.com 时,我会这样做:top.location.href='facebook.com/YOUR_PAGE_NAME?sk=app_YOUR_APP_ID' - 它在 mozzila 和 chrome 中工作正常,但在 Internet Explorer 中我得到“权限被拒绝”。我发现它是一个跨域脚本,但什么是解决方法?有人有同样的问题吗? 对不起,我正在处理:top.window.location,当我更改为 top.location.href 时它正在工作:)【参考方案2】:

我还想确保用户通过 Facebook 页面选项卡查看我的 Facebook 应用程序(而不是通过 Facebook 应用程序页面或直接查看实际网站本身)。我已经设法在我的文档的head 中的<script> 标记中使用这个javascript 来实现它(测试过的Mac/PC FF、Chrome、Opera、IE6-8、Safari)。

<script type="text/javascript">
  function NotInFacebookFrame() 
    return top === self;
  
  function ReferrerIsFacebookApp() 
    if(document.referrer) 
      return document.referrer.indexOf("apps.facebook.com") != -1;
    
    return false;
  
  if (NotInFacebookFrame() || ReferrerIsFacebookApp()) 
    top.location.replace("http://permalink-to-my-facebook-page-tab");
  
</script>

【讨论】:

天哪,正是我所需要的。我只更改为使用带有命名空间的函数。【参考方案3】:

我的应用程序非常动态,我不知道它被添加到了哪个页面。因此,当我使用 URL 'http://www.facebook.com/YOUR_PAGE_NAME?sk=app_YOUR_APP_ID' 时,它只将我重定向到页面,而不是应用程序选项卡。我要做的是:

1) 我从 signed_request 中获取页面 id(当有人访问该页面时,您的应用会获取加密的 base64url 参数,因此您必须对其进行解密并从 JSON 页面对象中选择 id 值)

2) 然后我从https://graph.facebook.com/PAGE_ID_YOUR_GET 获取页面数据。您将获得带有一些页面数据的 JSON 对象,以 JSON 格式响应。

3) 只有在第 2 点之后,我才能从响应中获得页面的“链接”值。就像http://www.facebook.com/pages/Some-Page-Name

4) 最后我将“?sk=app_YOUR_APP_ID”添加到页面链接。

也许这太复杂了,但这是它以我预期的方式为我工作的唯一方法(完全重定向到页面应用程序选项卡)。

【讨论】:

如果用户直接访问您的应用程序(画布),这将不起作用,签名请求中不会有页面对象,因此无论哪种方式,您都必须在应用程序配置的每个实例中设置页面名称和 id做一个重定向到正确的地方。【参考方案4】:
<script type="text/javascript">
  function NotInFacebookFrame() 
    return top === self;
  
  function ReferrerIsFacebookApp() 
    if(document.referrer) 
      return document.referrer.indexOf("apps.facebook.com") == -1;
    
    return false;
  
  if (NotInFacebookFrame() || ReferrerIsFacebookApp()) 
    top.location.replace("http://permalink-to-my-facebook-page-tab");
  
</script>

【讨论】:

以上是关于facebook将应用程序从画布页面重定向到粉丝页面的主要内容,如果未能解决你的问题,请参考以下文章

使用 facebook 登录网站后重定向页面

从 Facebook 重定向到 IOS 应用程序的特定帖子

如何使用passport-facebook身份验证重定向到用户登录react-redux应用程序的页面?

用户登录后 Facebook 不会重定向到回调 URL

Facebook页面根 据当前位置重定向

在 jquery Ajax 调用期间页面重定向到上一页