Facebook页面标签应用iframe可以检测到他们正在查看的页面吗?

oli*_*ite 0 php iframe facebook

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

Dej*_*vic 7

是.有signed_request(POST),页面ID ...您无法获取整个URL,因为请求将通过Facebook代理.以下是您如何做到这一点,以后只根据Page ID提供内容...

        $signed_request = $_POST['signed_request'];
        $response = Facebook::parse($signed_request);            
        $page_id = $response['page']['id']; 
Run Code Online (Sandbox Code Playgroud)

(这只是我班级的一部分)

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, '-_', '+/'));
    }

}
Run Code Online (Sandbox Code Playgroud)

编辑:

就像你说的那样,你需要为每个用户只授权一次app,你就可以在所有页面上使用它(我有数百个).当用户"连接"到app时,这是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
)
Run Code Online (Sandbox Code Playgroud)

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