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

0

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

Я знаю, что при использовании 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;
        }
    }

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

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

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

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

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

Теги:
canvas
facebook

1 ответ

0
Лучший ответ

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

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

  • 0
    Я собираюсь взглянуть, я много искал на этом форуме и что-нибудь говорил проверить signed_request . Посмотрим, может ли это помочь, спасибо :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню