Facebook - 如何使用iframe应用程序直接进入请求权限对话框?

时间:2010-12-07 21:54:05

标签: php javascript facebook permissions login

当用户通过http://apps.facebook.com/myappxxxxx访问我的Facebook应用时,我希望它立即显示请求权限fb对话框 - 就像许多其他人一样。

我尝试了各种各样的东西 - 包括使用getLoginUrl的php重定向,使用相同的javascript窗口位置重定向。

问题是它显示了一个很大的facebook图标而不是请求权限。但是,如果您单击该图标,它实际上会转到正确的请求权限页面!

有没有人知道如何正确地重定向到Facebook权限页面?

我正在使用带有iFrame FB应用程序的PHP api和JavaScript SDK。

5 个答案:

答案 0 :(得分:8)

前一段时间我遇到了完全相同的问题。这是一个小黑客:

if(!$me) {  
    $url =   "https://graph.facebook.com/oauth/authorize?"
                ."client_id=YOUR_APP_ID&"
                ."redirect_uri=http://apps.facebook.com/APP_SLUG/&"
                ."scope=user_photos,publish_stream";
    echo "<script language=javascript>window.open('$url', '_parent', '')</script>";
} else {
    your code...
}

它在我的代码中看起来如何(有点脏,我有一个截止日期):

require_once 'facebook-php-sdk/src/facebook.php';

$appid = '';

$facebook = new Facebook(array(
  'appId'  => $appid,
  'secret' => '',
  'cookie' => true,
));

$session = $facebook->getSession();

$me = null;
if ($session) {
  try {
    $uid = $facebook->getUser();
    $me = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    error_log($e);
  }
}
if(!$me) {
    // here we redirect for authentication:
    // This is the code you should be looking at:
    $url =   "https://graph.facebook.com/oauth/authorize?"
            ."client_id=$appid&"
            ."redirect_uri=http://apps.facebook.com/APP_SLUG/&"
            ."scope=user_photos,publish_stream";
    ?>
    <!doctype html>
    <html xmlns:fb="http://www.facebook.com/2008/fbml">
        <head>
            <title>Göngum til góðs</title>
            <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
            <script language=javascript>window.open('<?php echo $url ?>', '_parent', '')</script>
        </head>

        <body>
            Loading...
        </body>
    </html>

    <?php
    exit;
} else {
    your code ...
}

简单的标题重定向不起作用,因为它只会重定向您的iframe。访问_parent窗口需要Javascript。

修改

请记住,有一种正确的方法可以执行此操作(请参阅下面的答案),我不建议这样做。但是,嘿,你的船浮起来......

答案 1 :(得分:5)

你为什么不试试Facebook authenticated referrals?这是解决此类问题的正确方法。因为它要求Facebook捕获未连接的用户并将它们直接重定向到连接页面。

这可以确保默认情况下所有用户都已连接到您的应用。

答案 2 :(得分:2)

这是另一种选择:

<script>
    (function () {
        var url = 'your_permission_url';
        window.top.location.href = url;
    } ());
</script>

答案 3 :(得分:1)

网址应该来自getLoginUrl($ PARAMS)。它对我有用。 在你的情况下,

$PARAMS = array('scope' => 'user_photos,publish_stream', redirect_uri => 'https://apps.facebook.com/myappxxxxx');

答案 4 :(得分:0)

当我更改下面的网址时,它有效!!!!!

if(!$me) {  
    $url =   "https://www.facebook.com/dialog/oauth?"
                ."client_id=YOUR_APP_ID&"
                ."redirect_uri=http://apps.facebook.com/APP_SLUG/&"
                ."scope=user_photos,publish_stream";
    echo "<script language=javascript>window.open('$url', '_parent', '')</script>";
} else {
    your code...
}

感谢帖子