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

时间:2011-07-18 22:04:27

标签: php facebook iframe

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

2 个答案:

答案 0 :(得分:7)

是。有signed_request(POST),页面ID ...您无法获取整个URL,因为请求通过Facebook代理。以下是如何执行此操作的方法,稍后只根据Page 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, '-_', '+/'));
    }

}

编辑:

就像你说的那样,你需要为每个用户只授权一次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
)

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

答案 1 :(得分:1)

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