为什么我不能像我的页面那样得到Facebook?

时间:2012-06-04 08:51:00

标签: facebook facebook-graph-api facebook-apps

我想要做的是用户首先必须喜欢我的页面,然后才能转到我的facebook apps,但我不知道为什么我无法检测到它并且我的页面已被var_dump点赞,结果 NULL

这是我的代码

$request = $_REQUEST["signed_request"];
list($encoded_sig, $load) = explode('.', $request, 2);
$fbData = json_decode(base64_decode(strtr($load, '-_', '+/')), true);

var_dump($fbData["page"]["liked"]);// output is NULL

if (!empty($fbData["page"]["liked"]))
{ 
  echo "This content is for Fans only!";
} else {
  echo "Please click on the Like button to view this tab!";
}

知道该怎么做吗?

2 个答案:

答案 0 :(得分:0)

您需要获得user_likes权限才能检查他们是否喜欢您的 Facebook应用,但是$ fbData ["页面"] ["喜欢"]指的是 Facebook App Page ,它是单独的。

要修改应用页面,请转到应用设置>高级>在底部附近,您会看到应用页面

要使用权限user_likes查看此SO Answer On Detecting if a User Likes a Facebook App

答案 1 :(得分:0)

您是否确定 为signed_request参数?

一旦页面最初加载到Facebook iframe中,它就会被传输到您的应用程序 - 一旦您开始在应用程序内导航,它就不再存在了。

最好的办法恕我直言,如果不是空的话,解析signed_request,并将结果保存到你自己的会话中。

顺便说一下,自己解析它是相当耗时的 - 我建议使用PHP SDK并使用Facebook :: getSignedRequest() - 如果有signd_request参数,该方法会以解码的形式提供所有数据。

所以这就是我通常做的事情:

if($signed_request_data = $Facebook->getSignedRequest()) {
  $_SESSION['signed_request_data'] = $signed_request_data;
}

您可以在每个页面上调用该代码 - 只有当该方法实际返回数据时,您的会话才会更新。