如何识别我是否使用Facebook Canvas或Facebook App的网站版本

时间:2015-03-03 09:12:44

标签: php facebook canvas

我正在使用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参数,所以我无法识别我是否实际使用了画布版或网站版。为了暂时解决这个问题,我只是重新加载页面,因此Facebook可以保存另一个signed_request,但它非常烦人。

当我从Canvas版本转到网站版本而没有注销时,也会出现此问题。显然,is_canvas会话变量未设置,因此website版本看起来等于Canvas版本。

如何在登出后无需重新加载即可检查画布或网站中是否有我?我希望这个问题应该很容易解决,但我还没有想出如何做到这一点。

如果您对更多代码有任何疑问,或者我没有像我期待的那样清楚(对不起我的英语),请不要担心要问:)

感谢您的建议。

1 个答案:

答案 0 :(得分:0)

此处解决了类似/相关问题:Check if site is inside iframe

因为始终在iframe中调用canvas。请检查是否有帮助。