【问题标题】:Making Graph API calls within Tab application using PHP使用 PHP 在 Tab 应用程序中进行 Graph API 调用
【发布时间】:2011-09-08 21:20:46
【问题描述】:

我正在尝试创建一个 Facebook 选项卡应用程序,该应用程序可以显示权限对话框,就像它适用于 Facebook Connected 网站一样。我希望对于位于 iframe 中的选项卡应用程序,即使不是非常相似,该过程也是相同的。

这是我目前生成登录 URL 的方式:

$params = array(
    'canvas' => 1,
    'redirect_uri' => 'http://mysite.com/next_step",
    'scope' => 'email,user_about_me',
);

$login_url = $facebook->getLoginUrl( $params );

这将创建一个登录 URL,单击该 URL 时,如果用户尚未登录,则基本上会触发 Facebook 登录对话框,如果用户尚未授予我的应用程序的权限,则随后会触发权限对话框。这种技术在网站环境中完美运行。

但是,当我在 Facebook 内置的 iframe 中执行此操作时,我会得到以下结果:

当用户尚未接受权限时,单击登录 url 后,用户将被重定向到 iframe 内的页面,该页面仅在左上角显示 Facebook 徽标。单击徽标会使用户脱离 iframe 并显示权限对话框。从那时起,用户不再在 iframe 中。

如何使所有内容都保留在 iframe 中,以及如何使带有 Facebook 徽标的页面不显示?

【问题讨论】:

    标签: php facebook facebook-iframe


    【解决方案1】:

    为什么不使用登录对话框?

    https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&scope=email,read_stream

    您可以阅读更多如何使用它:http://developers.facebook.com/docs/authentication/

    示例如下:

    我使用 AppID:2785870588**573 和 Canvas URL:www.mysite.com

    创建了应用程序

    为了能够请求权限,我可以使用上面的链接,例如:

    .https://www.facebook.com/dialog/oauth?client_id=2785870588**573&redirect_uri=www.mysite.com&scope=email,read_stream

    或者像你一样:

    ...    
    $login_url = $facebook->getLoginUrl( $params );
    

    (两种方法应该产生相同的 URL)

    一旦我正确构建了 URL,我就会创建 HTML 链接。 在我的应用程序代码中,我可以简单地使用:

    <a target="_top" href="https://facebook.com/dialog/oauth?
        client_id=2785870588**573&
        redirect_uri=www.mysite.com&
        scope=email,read_stream">Login</a>
    

    这里重要的是target="_top",它告诉Facebook 在父框架中加载登录链接,而不是在您的应用程序中。这样您就不会获得 Facebook 徽标。

    如果有帮助,这里是一个工作示例:http://apps.facebook.com/278587058833573/

    【讨论】:

    • 生成的 URL 已经如下所示:facebook.com/dialog/oauth?client_id=xxx&redirect_uri=http://…。你能指出一个“真实”的例子,而不是我已经读过几次但对我没有意义的页面吗?
    • 很抱歉我不够清楚。这是关于 facebook (bugs.developers.facebook.net/show_bug.cgi?id=11326) 中框架的已知 facebook 错误。您必须指定链接的目标是顶部。一种常用的方法是使用 JavaScript (top.location.href="graph.facebook.com/dialog/oauth..)。我认为这也可以使用目标属性来完成:Login一个>
    • 你可以用一个例子来更新你的答案吗?我看到的所有解决方案都是零碎的,没有连贯的例子。将不胜感激。
    • 对不起,伙计。这行不通。单击登录后,它会跳出 iframe 并显示权限对话框。一旦权限被允许,我就会被带到 Facebook 之外的 redirect_url。感谢您一直以来的帮助。我在 Ubuntu 上的 Chromium 和 Firefox 中对此进行了测试。
    • 它转到您的应用程序,您可以将其重定向回 Facebook。这样,您就可以将授予应用程序权限的用户记录到数据库中。您的重定向 url 可以设置为例如 www.mysite.com/permissions.php 并且在 permissions.php 中您可以简单地拥有: header("位置:apps.facebook.com/278587058833573/"); ?>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多