【问题标题】:Facebook Application Tab URLFacebook 应用程序选项卡 URL
【发布时间】:2010-01-16 18:59:28
【问题描述】:

我有一个可以作为标签添加到粉丝页面的 facebook 应用程序。该应用程序要求用户经过身份验证才能使用它。这可以通过在链接中使用 requirelogin=1 来完成,该链接仅对未添加应用程序的用户可见。这部分工作正常。

但是,在用户从 requirelogin 打开的 dhtml 弹出窗口中授予我的应用程序权限后,我希望重新加载选项卡。为此,我需要将完整的 URL 包含在链接中,如下所示:

<a href="http://www.facebook.com/pages/PAGE_NAME/PAGE_ID?v=app_APP_ID" requirelogin=1>Authorize</a>

我无法弄清楚如何获取完整的 url,或者至少是 PAGE_NAME 来动态构建此 url。似乎应用程序应该能够知道它在哪里,而无需任何特殊权限。

【问题讨论】:

    标签: facebook facebooker facebook-fql


    【解决方案1】:

    加载您的选项卡时,API 会传递给您一个 Signed Request,其中包含一个 page 数组,其中包含 id、liked 和 admin。您可以使用它来动态提取当前正在调用您的代码的页面 id。

    【讨论】:

    • page_id 不是标签ID,因此您只能重新加载到页面流,如果您在此过程中更改地址,它本身不会重新加载;P
    • 看一下Tytus提供的URL格式——app id是静态的,page id可以从signed_request中提取。只需更正他链接中的错字(&而不是#)。即facebook.com/profile.php?id=PAGE_ID&v=app_APP_ID
    【解决方案2】:

    如果你有 PAGE ID 和 APP ID,这就是你要做的:

    http://www.facebook.com/profile.php?id=PAGE_ID#v=app_APP_ID
    

    例如:

    http://www.facebook.com/profile.php?id=282955631557#v=app_278523304881
    

    【讨论】:

    • ...是的,但这需要提前获得页面ID(硬编码)...这不是动态解决方案。
    【解决方案3】:

    在新方案中,# 不再有效。一个人需要使用

    http://www.facebook.com/profile.php?id=PAGE_ID#v=app_APP_ID
    

    要将参数传递给应用程序,它必须在一个名为“app_data”的参数中

    http://www.facebook.com/profile.php?id=PAGE_ID#v=app_APP_ID&app_data="..."
    

    要携带多个参数,最好的策略是把app_data编码成Json。

    【讨论】:

      【解决方案4】:

      以上所有答案均无效(仅将您重定向到页面流)或现已弃用。您使用 JS 的最佳解决方案:

      // called when like button, box, etc is rendered
      FB.Event.subscribe("xfbml.render", function() { 
      
          // assigns click to that thing
          FB.Event.subscribe("edge.create", function(response) { 
      
              window.location.reload(); // reload frame only
      
          });
      });
      

      您还必须加载和初始化 facebook JS SDK。如果你不知道怎么做,就用这个:

      <script>
          document.onload = function(){
      
              (function(d){
                  var js,id='facebook-jssdk';
                  if(d.getElementById(id)){return;}
                  js=d.createElement('script');
                  js.id=id;js.async=true;js.src="//connect.facebook.net/pl_PL/all.js";
                  d.getElementsByTagName('head')[0].appendChild(js);
              }(document));
      
              window.fbAsyncInit = function(){
                  FB.init({
                      appId  : <PASTE_YOUR_APP_ID_HERE>,
                      status : true, // check login status
                      cookie : true, // enable cookies to allow the server to access the session
                      xfbml  : true  // parse XFBML
                  });
                  FB.Event.subscribe("xfbml.render", function() {
                      FB.Event.subscribe("edge.create", function(response) {
                          window.location.reload();
                      });
                  });
              }
          }
      </script>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-26
        • 1970-01-01
        • 2012-05-03
        相关资源
        最近更新 更多