Я использую PHP PHP SDK (2.1.2). Все, что я хочу сделать, это то, что почти каждое приложение Facebook с req_perms
имеет. Глупый «запрос для разрешений» появляется, когда вы его устанавливаете.
Я не хочу кнопку, которую пользователь должен нажать. Я не хочу всплывать. Я не хочу использовать FBML, так как они справляются с этим .
Это стандартное диалоговое окно прав доступа в Facebook, которое показывает, где мое приложение должно появиться в canvas 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>
В основном, вы используете 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>