Я пытаюсь войти в создание приложений Facebook, но я испытываю затруднения при получении разрешения, работающего в схеме перенаправления в холсте.
Используя API JavaScript, я получил его работающий довольно легко в раскрывающейся схеме:
$("#loginButton").click(function(e) {
FB.login(function(response) {
if (response.perms) {
perms();
}
}, {perms : 'publish_stream'});
Но всплывающее окно должно быть ненужным дополнительным щелчком, потому что любое приложение, которое я вижу, запрашивает авторизацию прежде даже показать Вам целевую страницу. Как это:
Я полагаю, что они просто используют схему перенаправления. Таким образом, я провел весь день, пробуя различные способы, которыми я мог найти:
header("Location: https://graph.facebook.com/oauth/authorize?client_id=" . $gAppId . "&redirect_uri=" . urlencode($gUrl) . "&perms=publish_stream");
header("Location: http://www.facebook.com/login.php?v=1.0&api_key=" . $gApiKey . "&next=" . urlencode($gUrl) . "&canvas=");
header("Location: http://www.facebook.com/connect/uiserver.php?app_id=" . $gAppId . "&next=" . urlencode($gUrl) . "&return_session=0&fbconnect=0&canvas=1&legacy_return=1&method=permissions.request");
Но все они, вместо того, чтобы показать материал запроса авторизации, показывают ссылку как это:
Весело, если я открываю адрес iframe в новой вкладке, я получаю запрос авторизации как, я хотел. Но я хочу, чтобы это сразу отобразилось, без дополнительного щелчка, как любое приложение.
Вот пример приложения, которое делает авторизацию и запрашивает, чтобы полномочия все в одном пошли, в форме перенаправления, прежде даже отобразить целевую страницу:
www.facebook.com/send.fortune.cookies
Как они делают его?
Проблема в том, что перенаправление на стороне сервера перенаправляет только внутренний фрейм вашего приложения, а не всю страницу, а Facebook не любит отображать системные диалоги внутри фреймов.
Вам потребуется перенаправление на стороне клиента, возможно, что-то вроде этого:
<script>
<?php
if($doRedirect) {
echo 'top.location="http://redirect_url";';
}
?>
</script>