我开发了一个在Facebook画布中的iframe内运行的Facebook应用程序。为了使其正常工作,我请求用户的扩展权限。如果用户未授权应用程序,我将他/她发送到PHP SDK中带有getLoginUrl()方法的登录页面。
它有效,但它并不漂亮。该方法在验证页面之前将用户发送到登录页面。它看起来像这样:
当我点击“转到Facebook.com”时,我会看到权限请求的实际页面(如果我打印了网址,我也可以访问权限页面,将其复制并输入新的浏览器窗口)。当我从iframe进行重定向时,如何让Facebook跳过此步骤?
我的代码看起来像这样(使用CodeIgniter和Facebook PHP SDK):
$this->facebook = new Facebook(array(
'appId' => '{MY_APP_ID}',
'secret' => '{MY_SECRET}',
'cookie' => TRUE,
'domain' => $_SERVER['SERVER_NAME']
));
$this->facebook->getSession();
try {
$this->me = $this->facebook->api('/me');
}
catch (FacebookApiException $e) {
$this->me = NULL;
}
if ( is_null($this->me) ) {
redirect($this->facebook->getLoginUrl(array(
'req_perms' => 'offline_access,read_stream,publish_stream,user_photos,user_videos,read_friendlists',
'next' => $this->config->item('base_url').'fblogin.php?redirect_uri='.$this->uri->uri_string()
)));
}
答案 0 :(得分:4)
我认为您需要重定向父框架(即_top)而不是iFrame本身?
答案 1 :(得分:0)
我这样做的方法是使用以下
设置INDEX.PHP文件
//if user is logged in and session is valid. if ($fbme){ //fql query example using legacy method call and passing
参数 尝试{ $ fql =“选择姓名,hometown_location,性别, 来自用户的pic_square,其中uid =“。 $ UID; $ param = array( 'method'=> 'fql.query', 'query'=> $ FQL, 'callback'=> 'http://apps.facebook.com/yoursite/' ); $ fqlResult = $ facebook-> api($ param); } catch(Exception $ o){ d($ O); } }
然后将您的画布网址指向http://yoursite.com/INDEX.php
上面代码中的回调网址将在INDEX.PHP中设置授予权限的位置。
FBMain.php看起来像这样
//set application urls here $fbconfig['http://www.yoursite.com/iframeapp/YOURMAINPAGE.php/']
=“http://www.tyoursite.com/YOURMAINPAGE.php/”;
$fbconfig['http://apps.facebook.com/CANVASBASEURL']
=“http://apps.facebook.com/CANVASBASEURL”;
$uid = null; //facebook user id try{ include_once "facebook.php"; } catch(Exception $o){ echo '<pre>'; print_r($o); echo '</pre>'; } // Create our Application instance. $facebook = new Facebook(array( 'appId' => $fbconfig['APPID'], 'secret' => $fbconfig['SECRET'], 'cookie' => true, )); //Facebook Authentication part $session = $facebook->getSession(); $loginUrl = $facebook->getLoginUrl( array( 'canvas' => 1, 'fbconnect' => 0, 'req_perms'=>'email,publish_stream,status_update,user_birthday,user_location' ) ); $fbme = null; if (!$session) { echo "<script type='text/javascript'>top.location.href
='$ loginUrl';“; 出口; } 其他{ 尝试{ $ uid = $ facebook-&gt; getUser(); $ fbme = $ facebook-&gt; api('/ me');
} catch (FacebookApiException $e) { echo "<script type='text/javascript'>top.location.href
='$ loginUrl';“; 出口; } }
function d($d){ echo '<pre>'; print_r($d); echo '</pre>'; } ?>
希望它更清楚一些。我花了一段时间来弄明白,但我到了那里,以为我会帮忙。