Как узнать, открывается ли ваше веб-приложение внутри Facebook (холст) или снаружи (автономно)?

Я создаю страницу входа для своего приложения в PHP. Мое приложение использует fconnect для входа в систему. В настоящее время,

Если я открою автономное веб-приложение (www.acdef.com), оно должно показать логин fconnect. если он открыт внутри facebook (apps.facebook.com/myapp), он не должен показывать логин fconnect и, в зависимости от того, какой пользователь, должен показывать либо разрешения fb, либо целевую страницу приложения. Вот что я сделал

if( (isset($_SERVER['HTTP_REFEREER']) && strpos($_SERVER['HTTP_REFEREER'], "facebook.com") !==false) || (isset($this->request->get['ref']) && strpos($this->request->get['ref'], "facebook.com") !==false))
{ 
   // I am in canvass
}
{
   // I am not in canvass
}

Однако он работает не всегда. Много раз, даже находясь в канвасе, я вижу кнопку fblogin.

Какое лучшее решение?

-Аджай


person Thoughtful Monkey    schedule 27.02.2013    source источник
comment
Это должно ответить на ваш вопрос. Facebook использует фреймы. stackoverflow .com/questions/5859358/   -  person Ryan Knopp    schedule 27.02.2013


Ответы (2)


Если ваше приложение открыто внутри холста, у вас будет установлен $_REQUEST['signed_request'].

if( isset($_REQUEST['signed_request']) )
{ 
   // I am in canvass
}
else
{
   // I am not in canvass
}
person onon15    schedule 27.02.2013
comment
Спасибо за ваши ответы. Дай мне проверить - какой правильный :), а затем приму это как ответ. - person Thoughtful Monkey; 27.02.2013

Вы можете проверить, находится ли приложение в iframe (холсте fb) или нет, и действовать соответственно следующим образом:

<script type="text/javascript"> 
    if(window==window.top){ 
        top.location.href = '<?=$redirect_url?>';
    } 
</script>
person samiyamoto    schedule 28.02.2014