如何在Facebook SDK v 4中获得签名请求

时间:2014-06-05 06:02:50

标签: php facebook

我使用Facebook sdk 4在Facebook上创建了一个标签应用程序。我可以获得会话信息,如下所示。

 Facebook\FacebookSession Object
(
    [token:Facebook\FacebookSession:private] => xxxxxxxxxxxxx
    [signedRequestData:Facebook\FacebookSession:private] => Array
        (
            [algorithm] => HMAC-SHA256
            [expires] => 1401951600
            [issued_at] => 1401947659
            [oauth_token] => xxxxxxxxxxx
            [page] => Array
                (
                    [id] => 1503486xxxxxxxx
                    [liked] => 
                    [admin] => 1
                )

            [user] => Array
                (
                    [country] => lk
                    [locale] => en_GB
                    [age] => Array
                        (
                            [min] => 21
                        )

                )

            [user_id] => 85219xxxxxxxxxxxx
        )

)

我想检查用户是否已经喜欢该页面。我试过这种方式。

if($session['page']['liked'] == 1){
     echo "user liked the page";
}else{
     echo "not liked";
}

但没有用。

3 个答案:

答案 0 :(得分:3)

这不再适用,因为Facebook正在劝阻“喜欢门控”的内容。

https://developers.facebook.com/docs/apps/changelog#v2_1_90_day_deprecations 今天之后创建的Page Tab应用的'signed_request'对象将不再返回'likes'属性。从2014年11月5日起,“喜欢”属性将始终返回“true”,无论此人是否喜欢该页面。

https://developers.facebook.com/docs/facebook-login/permissions/v2.1#reference-user_likes 由于您需要user_likes权限来确定用户是否喜欢该页面,从而需要进行应用审核,因此您很可能无法获得批准的权限:

不允许:根据某人是否喜欢某个网页,对您的应用或应用内的某些内容进行访问。

答案 1 :(得分:2)

试试这个:

$pageInfo = $session->getSignedRequestProperty('page');
if ($pageInfo['liked'] == 1) {

这是在周五实施的:https://github.com/facebook/facebook-php-sdk-v4/pull/97

应该是4.0.7版本。

$helper = new FacebookPageTabHelper();

$user_liked = $helper->isLiked(); 

答案 2 :(得分:1)

不再支持此功能: Graph API v2.1 and updated iOS and Android SDKs

在signed_request对象的page属性中不再返回 like 字段。所以我想不再强迫用户喜欢页面来获取标签内容......