0

我想做的是用户必须先喜欢我的页面然后才能访问我的页面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!";
}

知道怎么做吗?

4

2 回答 2

0

您需要获得许可user_likes才能检查他们是否喜欢您的Facebook 应用程序,但 $fbData["page"]["liked"] 指的是您的Facebook 应用程序页面,它是单独的。

要编辑您的应用页面,请转到应用设置 > 高级 > 在底部附近,您将看到应用页面

要使用权限 user_likes 进行检查,请参阅此SO Answer On Detecting if a User Likes a Facebook App

于 2012-06-04T08:53:32.007 回答
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;
}

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

于 2012-06-04T09:02:51.950 回答