Facebook页面标签应用iframes能检测到他们的页面吗;正在通过查看


Can Facebook Page tab app iframes detect the page they're being viewed via?

我正在用PHP开发我的第一个Facebook应用程序,我想知道该应用程序是否可以检测到Facebook上正在查看的页面。我计划在几个不同的页面上显示该应用程序,并希望该应用程序为每个页面显示不同的内容。这样,我只需要用户接受一个中央应用程序的权限,而不是几个不同的权限。

是。有signed_request(POST(,具有页面ID…您无法获得整个URL,因为请求是通过Facebook代理发送的。以下是如何做到这一点的方法,稍后只提供基于页面ID的内容…

        $signed_request = $_POST['signed_request'];
        $response = Facebook::parse($signed_request);            
        $page_id = $response['page']['id']; 

(这只是我班的一部分(

class Facebook {
    // Facebook signed request parser    
    public static function parse($signed)
    {
        list($encoded, $payload) = explode('.', $signed, 2); 
        $sig = Facebook::base64_url_decode($encoded);
        $data = json_decode(Facebook::base64_url_decode($payload), true);
        if(strtoupper($data['algorithm']) !== 'HMAC-SHA256'){
            error_log('Unknown algorithm. Expected HMAC-SHA256');
            return false;
        }
        return $data;
    }
    // Base64 decode for Facebook
    private static function base64_url_decode($input)
    {
        return base64_decode(strtr($input, '-_', '+/'));
    }
}

编辑:

就像你所说的,你只需要为每个用户授权一次应用程序,你就可以在所有页面上使用它(我有数百个(。当用户"连接"到应用程序时,这是signed_request的输出。

Array
(
    [algorithm] => HMAC-SHA256
    [expires] => 0
    [issued_at] => 1311062412
    [oauth_token] =>
    [page] => Array
        (
            [id] => 149715315100385
            [liked] => 1
            [admin] => 1
        )
    [user] => Array
        (
            [country] => ba
            [locale] => en_US
            [age] => Array
                (
                    [min] => 21
                )
        )
    [user_id] => 1368368917
)

您可以看到page->id,一个user_id,您还将获得访问用户信息的令牌(对于那些您有权限的用户(。

在创建第一个应用程序时,您可以在开发人员应用程序中设置此位置。转到facebook.com/developers并创建一个新的应用程序,您将能够设置画布应用程序的位置,然后将其加载到app.facebook.com/your_app_NAME.