【发布时间】:2014-01-20 07:40:14
【问题描述】:
当用户点击赞按钮时,我想更改页面的内容(它直接用新内容重新加载页面)。
我可以这样做,但前提是我首先单击登录按钮以获取我帐户的基本信息。我不想要求这一步。
我想要的一个例子是https://www.facebook.com/Dior(标签 Dior VIII)。
【问题讨论】:
标签: facebook facebook-graph-api facebook-page
当用户点击赞按钮时,我想更改页面的内容(它直接用新内容重新加载页面)。
我可以这样做,但前提是我首先单击登录按钮以获取我帐户的基本信息。我不想要求这一步。
我想要的一个例子是https://www.facebook.com/Dior(标签 Dior VIII)。
【问题讨论】:
标签: facebook facebook-graph-api facebook-page
您需要使用其中一个 SDK 实现例程。 Facebook 将所谓的签名请求传递给所有画布应用程序以及在 iframe 中运行的此类应用程序。除此之外,它还包括当前用户是否喜欢该页面的信息。您需要检索信息并检查点赞状态。
对于 PHP,这将是这样的:
<?php
require(facebook.php); // include Facebook PHP SDK
$app_id = "your_app_id";
$app_secret = "your_app_secret";
$facebook = new Facebook(array(
'appId' => $app_id,
'secret' => $app_secret,
'cookie' => true
));
$signed_request = $facebook->getSignedRequest();
if($signed_request = $this->parsePageSignedRequest()) {
if($signed_request->page->liked) {
// output fan content
} else {
// output non-fan content
}
}
function parsePageSignedRequest() {
if (isset($_REQUEST['signed_request'])) {
$encoded_sig = null;
$payload = null;
list($encoded_sig, $payload) = explode('.', $_REQUEST['signed_request'], 2);
$sig = base64_decode(strtr($encoded_sig, '-_', '+/'));
$data = json_decode(base64_decode(strtr($payload, '-_', '+/'), true));
return $data;
}
return false;
}
?>
【讨论】:
有一个名为getSignedRequest() 的方法。调用此方法。如果当前用户已经是 Facebook 页面的粉丝,则此方法返回:
$faceboook->getSignedRequest()
【讨论】:
使用FB.Event.Subscribe and edge.create 有一种更简单的方法。 JavaScript 代码位于http://fivespot.me/like-reveal-simple.txt。
将此添加到您的登录页面,更改应用程序 ID 和您想要重定向到的链接,在用户喜欢它显示yoursite.com/afterlike.html 的位置之后。
这是最简单最有效的方法。
【讨论】:
页面获得签名请求。对此进行解码以了解用户是否喜欢该页面。在 PHP 中:
<?php
$signedRequestObject = parse_signed_request( $_POST["signed_request"],YOUR_APPLICATION_SECRET );
if ($signedRequestObject["page"]){
// This means this signed_request was generated on a page.
if ($signedRequestObject["page"]["liked"]){
// the page was liked
}
}
//Used functions
function parse_signed_request($signed_request, $secret) {
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$sig = $this->base64_url_decode($encoded_sig);
$data = json_decode($this->base64_url_decode($payload), true);
if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
echo 'Unknown algorithm. Expected HMAC-SHA256 : ';
return false;
}
$expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
if ($sig !== $expected_sig) {
echo = 'Bad Signed JSON signature!';
return false;
}
return $data;
}
function base64_url_decode($input) {
return base64_decode(strtr($input, '-_', '+/'));
}
?>
【讨论】: