2010-03-29 4 views
0

У меня есть серьезная проблема с приложением iframe. Мне нужно использовать много внешних JS-библиотек и других динамических stuuf, поэтому приложение FMBL не может быть выполнено. Когда я вызываю require_login(), я получаю диалог установки приложения, когда приложение еще не установлено, что нормально. Но после того, как приложение авторизации входит в бесконечный цикл переадресации с такими параметрами, как auth_token, установлено и так. Вчера мне удалось это исправить, но сегодня он снова сломался ... Что, черт возьми, происходит с FB? Это сводит меня с ума, чтобы найти разрешение, ни одно из найденных в сети, похоже, не работает.Facebook require_login() в приложении iFrame

До сих пор я пытался:

http://abhirama.wordpress.com/2010/03/07/facebook-iframe-xfbml-app/ (! 7 марта 2010) http://forum.developers.facebook.com/viewtopic.php?pid=156092 http://www.keywordintellect.com/facebook-development/how-to-set-up-a-facebook-iframe-application-in-php-in-5-minutes/

http://www.markdeepwell.com/2010/02/validating-a-facebook-session-within-an-iframe/ http://forum.developers.facebook.com/viewtopic.php?pid=210449 http://www.ajaxlines.com/ajax/stuff/article/facebook_fbml_rendering_in_iframe_application.php http://www.aratide.com/php/solving-the-break-out-issue-in-iframe-facebook-applications/

Ничего из вышеперечисленного не работает ... По словам тех, и некоторые документы FB: http://wiki.developers.facebook.com/index.php/FB_RequireFeatures http://wiki.developers.facebook.com/index.php/Cross_Domain_Communication_Channel

Мой пример тестовых файлов выглядят следующим образом:

<?php 
//Link in library. 
require_once '../application/vendor/Facebook/facebook.php'; 

//Authentication Keys 
$appapikey = 'XXXX'; 
$appsecret = 'XXXX'; 

//Construct the class 
$facebook = new Facebook($appapikey, $appsecret); 

//Require login 
$user_id = $facebook->require_login(); 

?> 

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml"> 
<head> 
    <title></title> 
</head> 
<body> 
    <script src="http://static.ak.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php" type="text/javascript"></script> 
    This is you: <fb:name uid="<?php echo $user_id?>"></fb:name> 
    <?php var_dump($facebook->$this->facebook->api_client->friends_get())?> 
    <script type="text/javascript"> 
FB_RequireFeatures(["XFBML"], function(){ 
    FB.Facebook.init("<?=$appapikey?>", "xd_receiver.html"); 
}); 
    </script> 
</body> 
</html> 

И файл xd_receiver.html междоменном является:

<!doctype html public "-//w3c//dtd xhtml 1.0 strict//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
    <head> 
    <title>cross-domain receiver page</title> 
    </head> 
    <body> 
    <script src="http://static.ak.facebook.com/js/api_lib/v0.4/XdCommReceiver.js" type="text/javascript"></script> 
    </body> 
</html> 

Как заставить его работать?

Я использую структуру Kohana для этого и уже сменил заголовок («Местоположение») с url :: redirect() в библиотеке php facebook.

ответ

0

Facebook ограничивает использование многих тегов HTML. Кажется, что вы используете некоторые ограниченные теги в своем коде. Вы пытались удалить их?

В случае, если вы хотите использовать эти теги (<body> для например) делают это приложение IFrame вместо FBML ...

+0

Это приложение iframe.Я пытаюсь вызвать require_login внутри iframe, и я перенаправляюсь за пределы Facebook к моему приложению на моем сервере, заканчивая бесконечным циклом с переменной auth_token в URI. Я попытался также использовать приложение FBML и поместить iframe в холст с помощью , но поток будет таким же. –

1

Много учебников вы смотрите на очень устарелый. API Facebook и сопровождающие SDK меняются довольно быстро, и хотя это не означает, что делать «старые» способы невозможно, эти способы, скорее всего, будут разбиты, устарели, удалены или менее хорошо документированы.

Для лучшей поддержки попробуйте обновить до последней PHP SDK: https://github.com/facebook/php-sdk/

Затем вы можете использовать этот пример в качестве основы для того, что вы пытаетесь сделать: https://github.com/facebook/php-sdk/blob/master/examples/example.php

Он представляет пользователю войти в ссылку, но если вы находитесь в контексте, где вы хотите, чтобы заставить логин, показывая содержимое только авторизированным пользователям (имитирующие старые require_login), можно заменить:

// Login or logout url will be needed depending on current user state. 
if ($user) { 
    $logoutUrl = $facebook->getLogoutUrl(); 
} else { 
    $loginUrl = $facebook->getLoginUrl(); 
} 

остроумие h:

// Get logout URL, or redirect user to login URL 
if ($user) { 
    $logoutUrl = $facebook->getLogoutUrl(); 
} else { 
    header('Location: ' . $facebook->getLoginUrl()) ; 
} 
Смежные вопросы