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

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

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

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

谢谢,彼得

【问题讨论】:

    标签: facebook canvas facebook-page


    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 2012-04-17
      • 2013-01-19
      • 1970-01-01
      相关资源
      最近更新 更多