Я использую 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>