Facebook - как перейти непосредственно к диалогу запроса разрешения с приложением iframe? - PullRequest
8 голосов
/ 08 декабря 2010

Когда пользователь получает доступ к моему приложению Facebook через http://apps.facebook.com/myappxxxxx,, я хочу, чтобы он немедленно отображал диалоговое окно запроса разрешения fb - как и многие другие.

Я перепробовал все виды вещей - включая перенаправление php с использованием getLoginUrl, перенаправление местоположения окна javascript с использованием того же самого.

Проблема в том, что вместо разрешения запроса отображается большой значок facebook. Однако, если вы щелкнете по этому значку, он перейдет на правильную страницу разрешений для запроса!

Кто-нибудь знает, как правильно перенаправить на страницу разрешений Facebook?

Я использую PHP api и JavaScript SDK с приложением iFrame FB.

Ответы [ 5 ]

8 голосов
/ 08 декабря 2010

У меня была точно такая же проблема некоторое время назад.Вот небольшой взлом:

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.Javascript необходим для доступа к окну _parent.

Редактировать

Имейте в виду, что есть правильный способ сделать это (см. Ответ ниже), и я не рекомендую делать это.Но эй, что когда-либо плавает на твоей лодке ...

5 голосов
/ 15 января 2012

Почему бы вам не попробовать проверенных рефералов Facebook ?Это правильное решение для такой проблемы.Поскольку он просит Facebook отловить не подключенных пользователей и перенаправить их прямо на страницу подключения.

Это гарантирует, что все пользователи подключены к вашему приложению по умолчанию.

2 голосов
/ 08 декабря 2010

Вот еще один вариант:

<script>
    (function () {
        var url = 'your_permission_url';
        window.top.location.href = url;
    } ());
</script>
1 голос
/ 28 декабря 2011

URL-адрес должен быть из getLoginUrl ($ PARAMS). Это сработало для меня. В вашем случае

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

0 голосов
/ 03 октября 2013

Когда я изменяю URL, как показано ниже, это работает !!!!!

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...
}

Спасибо за пост

...