Как заставить мое приложение Facebook автоматически запрашивать необходимые разрешения после установки - PullRequest
2 голосов
/ 18 октября 2010

Я использую Facebook PHP SDK (2.1.2). Все, что я хочу сделать, - это то, что есть почти в каждом приложении Facebook с req_perms. Глупое окно «запрос разрешений», которое появляется при установке.

Я не хочу кнопку, которую пользователь должен нажать. Я не хочу, чтобы всплывающее окно появлялось. Я не хочу использовать FBML, , так как они покончили с этим .

Это стандартный диалог разрешений Facebook, который показывает, где мое приложение должно отображаться в холсте iframe.

Я пытался:

<?php if(!$me): ?>
    <head>
        <meta HTTP-EQUIV="REFRESH" content="0; <?php echo $loginUrl; ?>">
    </head>
<?php die(); ?>
<?php endif; ?>

По какой-то причине логотип Facebook был связан с правильным URL-адресом, который я хотел ( не то, что я хочу! )

<?php if($me): ?>
    window.fbAsyncInit = function() {
        FB.init({
            appId   : '<?php echo $appid; ?>',
            session : <?php echo isset($session) ? "'".json_encode($session)."'" : 'null'; ?>, // don't refetch the session when PHP already has it
            status  : true, // check login status
            cookie  : true, // enable cookies to allow the server to access the session
            xfbml   : true // parse XFBML
        });

        // Whenever the user logs in, we refresh the page
        FB.Event.subscribe('auth.login', function() {
            window.location.reload();
        });
    };

    (function() {
        var e = document.createElement('script');
        e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
        e.async = true;
        document.getElementById('fb-root').appendChild(e);
    }());
 </script>
 <fb:redirect url="<?php echo $loginUrl; ?>" />
 <?php die("</html>"); ?>

Этот показал пустую страницу.

<?php if($me): ?>
    window.fbAsyncInit = function() {
        FB.init({
            appId   : '<?php echo $appid; ?>',
            session : <?php echo isset($session) ? "'".json_encode($session)."'" : 'null'; ?>, // don't refetch the session when PHP already has it
            status  : true, // check login status
            cookie  : true, // enable cookies to allow the server to access the session
            xfbml   : true // parse XFBML
        });

        // Whenever the user logs in, we refresh the page.
        FB.Event.subscribe('auth.login', function() {
            window.location.reload();
        });
    };

    (function() {
        var e = document.createElement('script');
        e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
        e.async = true;
        document.getElementById('fb-root').appendChild(e);
    }());
 </script>
 <script>
     FB.login(function(response) {
         if (response.session) {
             if (response.perms.indexOf('publish_stream') != -1) {
                 //User has logged in and given us publish_stream permissions
             );
             else {
                 //User has logged in but not given us publish_stream
             }
         }
         else {
             //User is not logged in
     }, {perms:'offline_access,publish_stream'});
 </script>

Здесь также показана пустая страница.

То, что я хочу, не непопулярно, но документация Facebook - худшая документация, с которой я когда-либо сталкивался. Ничего не работает Что-то такое идиотское, простое, не должно занять двух дней, чтобы понять.

Вот решение, которое я выбрал:

<div id="fb-root"></div>
<script>
    window.fbAsyncInit = function() {
        FB.init({
            appId   : '<?php echo $appid; ?>',
            session : <?php echo isset($session) ? "'".json_encode($session)."'" : 'null'; ?>, // don't refetch the session when PHP already has it
            status  : true, // check login status
            cookie  : true, // enable cookies to allow the server to access the session
            xfbml   : true     // parse XFBML
        });

        FB.getLoginStatus(function(response) {
            if (response.session) {
                // Logged in and connected user, someone you know.
            } else {
                // No user session available, redirect them to login.
                window.top.location = "<?php echo $loginUrl; ?>";
            }
        });

        // Whenever the user logs in, we refresh the page.
        FB.Event.subscribe('auth.login', function() {
            window.location.reload();
        });
    };

    (function() {
        var e = document.createElement('script');
        e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
        e.async = true;
        document.getElementById('fb-root').appendChild(e);
    }());
</script>

1 Ответ

0 голосов
/ 18 октября 2010

Обычно вы используете PHP SDK для получения URL-адреса для входа, а затем выполняете перенаправление JavaScript на этот URL-адрес.Пример http://github.com/facebook/php-sdk/blob/master/examples/example.php делает все для вас, кроме перенаправления.В примере у них есть ссылка, по которой вы нажимаете, чтобы войти.Если вы хотите, чтобы оно было автоматическим, выполните следующие действия.

<script>
    FB.getLoginStatus(function(response) {
        if (response.session) {
            // Logged in and connected user, someone you know.
        } 
        else {
            // No user session available, redirect them to login.
            window.top.location = <?php echo $loginUrl; ?>
        }
    });
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...