Как узнать, пользуюсь ли я Facebook Canvas или веб-версией приложения Facebook

Я использую приложение Facebook для создания своего рода «социальной сети» платформы.
Версия веб-сайта использует Facebook API, Twitter OAuth и Instagram, а версия Canvas использует только Facebook API.

Я знаю, что при использовании Canvas Facebook отправляет signed_request параметр, который фактически признает, что я использую версию Canvas, а не версию веб-сайта. Итак, это мой код входа в систему:

login.php

$is_canvas=$SController->checkIsCanvas();

if(isset($_REQUEST['request_ids'])) {
$_SESSION['auth_request']=strip_tags($_GET['request_ids']);
}

socialclass.php

function checkIsCanvas() {
$helper = new FacebookCanvasLoginHelper();
try {
$session = $helper->getSession();
} catch (FacebookRequestException $ex) {
return $ex->getMessage();
} catch (\Exception $ex) {
return $ex->getMessage();
}
if ($session) {
$_SESSION['is_canvas']='true';
$accessToken=$session->getAccessToken();
$_SESSION['auth_tk_facebook']=$accessToken->__toString();
$request = new FacebookRequest(
$session,
'GET',
'/me?fields=id,name,first_name,last_name,birthday,email,age_range,location,gender'
);
$response = $request->execute();
$userProfile = $response->getGraphObject(GraphUser::className());
if(isset($userProfile)) {
$login=$this->checkFacebookLogin($userProfile);
if($login===false) {
return $userProfile;
} else {
header("Location:".getBASEURL());
}
} else {
return false;
}
} else {
return false;
}
}

Проблема в том, что когда я выхожу с холста, а затем снова захожу, Facebook не отправлял signed_request параметр, поэтому я не могу узнать, использую ли я версию Canvas или версию веб-сайта. Чтобы временно решить эту проблему, я просто перезагружаю страницу, чтобы Facebook мог сохранить другую signed_request, но это довольно раздражает.

Эта проблема возникает также, когда я перехожу с версии Canvas на версию веб-сайта без выхода из системы. Очевидно, что is_canvas переменная сеанса не сбрасывается, поэтому website версия кажется равной Canvas версия.

Как я всегда могу проверить, нахожусь ли я на холсте или на веб-сайте без перезагрузки после выхода из системы? Надеюсь, эту проблему легко решить, но я пока не понял, как это сделать.

Если у вас есть какие-либо вопросы о большем количестве фрагментов кода или если я не был так ясен, как я ожидал (извините за мой английский тоже), не беспокойтесь о том, чтобы спрашивать 🙂

Спасибо за совет.

1

Решение

Подобный / связанный Вопрос решается здесь: Проверьте, находится ли сайт внутри iframe

Потому что холст всегда вызывается в iframe. Пожалуйста, проверьте, помогает ли это.

0

Другие решения

Других решений пока нет …