“一页”;“门控”;具有权限的Facebook选项卡/应用程序


One-Page "Gated" Facebook Tab/App with Permissions

我正试图创建一个具有特定需求的Facebook选项卡/应用程序,这让我遇到了一段非常困难的时间:

  1. 它必须包含在一个文件中——index.php(辅助文件,如.js、.css和其他包含的.php文件也可以(
  2. 它必须有一个启动页面,在"选择"时(即:单击"转到"按钮(调用权限
  3. 必须在PHP SDK中完成

现在,我以前使用过Javascript SDK,它非常简单。我正试图用PHP做这件事,它在我的系统中抛出了一些扳手。

这是我的基本设置:

在index.php中,我在文件顶部包含了一个global.php,用于处理整个facebookSDK include和:

$facebook = new Facebook(array(
    'appId' => APP_ID,
    'secret' => APP_SECRET,
));

然后,我根据已签名的请求($signed_request = $facebook->getSignedRequest(); signed_request['app_data']("选通"正在加载的内容。如果已签名的请求"app_data"设置为"flash_load",则会检查权限。如果权限通过,则加载闪存文件,否则将请求权限。如果app_data!='flash_load启动页面已加载。

通用页面流程:

Page load
    If( app_data == flash_load )
        check permissions
        if permissions
            render flash
        else 
            request permissions
    else
        render splash page

启动页面有一个按钮,上面写着"Go",直接链接到页面选项卡(即:http://www.facebook.com/{{{PAGE_NAME}}}?v=app_{{{app_ID}}}&app_data=flash_load(。我还设置了与Facebook登录网站URL相同的URL@https://developers.facebook.com/apps/{{APP_ID}}}

所有这些都运行得很好,除了这个流的明确例外:

如果用户没有权限:

  1. 他们访问选项卡
  2. 它们由启动屏幕提示
  3. 他们点击"Go",重新指向http://www.facebook.com/{{{PAGE_NAME}}}?v=app_{{{app_ID}}}&app_data=flash加载
  4. 页面(index.php(重新加载一个签名请求app_data=flash_load
  5. 已授予权限
  6. index.php重新加载到SPLASH页面

如何使INITIALreloadAFTER授予权限时加载闪存文件,而不是启动?

我已尝试将state添加到redirect_uri,但无法使用$_GET$_REQUEST$facebook->getSignedRequest(); 获取值

我还尝试过使用$_SERVER获取URL并解析出来,但这并不是指Facebook的URL。

附带说明:在授予权限后的第一次重新加载之后的每次后续加载都应正常加载启动。

当您请求权限时,您可以使用user_idoauth_token来确定用户已经授权了您的应用程序,并且您可以加载闪存文件而不是启动屏幕。

关于signed_request字段的文档描述与相同

一些字段和值,例如user_id和oauth_token,只有在用户登录到您的应用程序时才会传递。