我正在用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.