我有一个facebook pagetab应用程序,我被困在以下情况
我需要检查用户是否登录
如果没有,则重定向到具有
user_likes,publish_actions,email
权限的登录url
以及用户是否为页面点赞
如果不喜欢,则显示相似门
现在在上面我卡住了以下错误,我在FB pagetab (iFRAM
)
拒绝在帧中显示'https://www.facebook.com/v2.0/dialog/oauth?client_id=839424369402407&redire...c8682d9a9fb5b&sdk=php-sdk-4.0.9&scope=email%2Cuser_likes%2Cpublish_actions',因为它将'X-Frame-Options'设置为'DENY'。
现在我想用JS sdk实现流,获得访问令牌,然后使用ajax调用将其传递给php代码
有更好的方法来解决这种情况吗?代码
try {
$session = $helper->getSessionFromRedirect();
} catch(FacebookRequestException $ex) {
error_log($ex->getCode());
error_log($ex->getMessage());
} catch('Exception $ex) {
error_log($ex->getCode());
error_log($ex->getMessage());
}
if($_GET['error']=="access_denied"){
header("location:/login/");
exit;
}else if (isset($session) || (isset($_SESSION['fb_user_session_access_token'])) && !empty($_SESSION['fb_user_session_access_token'])) {
if(isset($session))
$_SESSION['fb_user_session_access_token'] = $session->getToken();
else{
$access_token = $_SESSION['fb_user_session_access_token'];
$session = new FacebookSession($access_token);
}
try {
$user_profile = (new FacebookRequest(
$session, 'GET', '/me'
))->execute()->getGraphObject(GraphUser::className());
$email = $user_profile->getProperty('email');
$name = $user_profile->getProperty('name');
$fb_id = $user_profile->getProperty('id');
$query = mysql_query("select id, email from ntuc_users where email = '$email'");
$user_found = mysql_num_rows($query);
if(!$user_found){
//code deleted
exit;
} catch(FacebookRequestException $e) {
error_log($e->getCode());
error_log($e->getMessage());
//if token get expired
$loginUrl = $helper->getLoginUrl(array('req_perms' => 'email'));
header("location:".$loginUrl);
exit;
}
}
else
{
$loginUrl = $helper->getLoginUrl(array('req_perms' => 'email'));
header("location:".$loginUrl);
exit;
}
thanks in advanced
经过2天的研究,我得到了这个…这是我为我的应用程序
实现的流程@BjörnKaiser提到Facebook政策不再支持LIKEGATE ..这是真的…
所以我已经通过FB策略并得到以下ans
<只鼓励人们登录你的应用,比如你的应用页面,在你的应用页面上进行推广,或者在某个地方签到。不要激励其他行为。自2014年11月5日起,你可能不再鼓励人们喜欢你的应用程序的页面
FB政策/strong>
然而,参考上述信息,我试图执行类似的流程,但FB与FB APP审核团队的运气不好
但是我从评审小组那里又得到了一个参考
请注意,使用"user_likes"来检查是否有人喜欢你的Facebook用例是不被批准的。User_likes提供了一个人所有喜欢的信息,这些数据应该被用来增强应用程序的体验。如果您需要确定谁已经喜欢了您的页面,请使用页标签应用程序的签名请求。
FB USER LIKE POLICY
使用signed requests
,至少对于pagetab它像一个魅力:)..但对于移动网站,我已经删除了it
代码如下:
if( isset($_REQUEST['signed_request']) )
{
$user_data = $this->parse_signed_request($_REQUEST['signed_request']);
$access_token = $_SESSION['fb_user_session_access_token'];
}
if( (isset($user_data['page']["liked"]) && !empty($user_data['page']["liked"]) && $user_data['page']["liked"]) || $this->deviceType != "computer")//no like gate for mobile
{
//my code ...
}
private function parse_signed_request($signed_request) {
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$secret = FB_APP_SECRET; // Use your app secret here
// decode the data
$sig = $this->base64_url_decode($encoded_sig);
$data = json_decode($this->base64_url_decode($payload), true);
// confirm the signature
$expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
if ($sig !== $expected_sig) {
$this->log->write('Bad Signed JSON signature!');
return null;
}
return $data;
}
private function base64_url_decode($input) {
return base64_decode(strtr($input, '-_', '+/'));
}