Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Facebook JavaScript API检测Like+;iFrame_Facebook_Facebook Graph Api_Fbml_Xfbml - Fatal编程技术网

使用Facebook JavaScript API检测Like+;iFrame

使用Facebook JavaScript API检测Like+;iFrame,facebook,facebook-graph-api,fbml,xfbml,Facebook,Facebook Graph Api,Fbml,Xfbml,使用FacebookJavaScriptAPI构建应用程序,该应用程序将使用新的iframe方法嵌入到页面中 我想检测他们是否喜欢当前页面。通常我会在PHP中使用print\u r($\u REQUEST),但在使用iframe时,这似乎不起作用 还有这个选项:但它说它已经被弃用了,我从来没有喜欢过这个方法,因为它相当粗糙 我现在怎么做?更喜欢使用XFBML+JavaScript API,但如果需要,可以使用PHP。我们已经做过几次了,它似乎工作得很好。它使用XFBML生成一个脚本,使用JSSD

使用FacebookJavaScriptAPI构建应用程序,该应用程序将使用新的iframe方法嵌入到页面中

我想检测他们是否喜欢当前页面。通常我会在PHP中使用print\u r($\u REQUEST),但在使用iframe时,这似乎不起作用

还有这个选项:但它说它已经被弃用了,我从来没有喜欢过这个方法,因为它相当粗糙


我现在怎么做?更喜欢使用XFBML+JavaScript API,但如果需要,可以使用PHP。

我们已经做过几次了,它似乎工作得很好。它使用XFBML生成一个脚本,使用JSSDK呈现XFBML并订阅。代码示例如下:

编辑:由于您希望在页面加载时检测用户是否是粉丝,而FB不推荐该功能,以便在画布加载时通过将
FB\u page\u id
传递到地址查询字符串直接从用户处获取该功能,因此您需要为用户安装一个应用程序来测试页面的粉丝dom。这当然会给你的应用程序增加很多摩擦,但我想这就是现在的情况

    <?php
require 'facebook.php';

// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
    'appId'  => 'YOUR APP ID',
    'secret' => 'YOUR APP SECRET',
    'cookie' => false,
));

try
{
    $session = $facebook->getSession();

    if (empty($session['uid']))
    {
        throw new Exception("User not connected to application.");
    }

    $is_fan = $facebook->api(array(
        'method'    => 'fql.query',
        'query'     => "SELECT uid, page_id FROM page_fan WHERE uid = {$session['uid']}"
    ));

    if (false == $is_fan || count($is_fan) == 0) // 0 results will be returned if the user is not a fan
    {
        $is_fan = false;
    }
    else
    {
        $is_fan = true;
    }   
}
catch (FacebookApiException $e)
{
    /**
     * you don't have an active user session or required permissions 
     * for this user, so rdr to facebook to login.
    **/

    $loginUrl = $facebook->getLoginUrl(array(
        'req_perms' => 'user_likes'
    ));

    header('Location: ' . $loginUrl);
    exit;
}
?>
<html>
<head>
</head>
<body>

<? if (empty($is_fan)): //user is not a fan. ?>
    <fb:like href="http://www.facebook.com/your-facebook-page"
        show_faces="true"
        width="400">
    </fb:like>
<? else: ?>
    Yay! You're a fan!
<? endif; >?

<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js" type="text/javascript">
    </script>
<script type="text/javascript">
FB.init({
    appId: '<?= FB_APP_ID; ?>',
    cookie: true,
    status: true,
    xfbml: true
});

// Subscribe to the edge creation event, from Facebook
FB.Event.subscribe('edge.create', function(response)
{
    alert("Congratulations! We are so excited that you are a fan now! woot!")
});

</script>

</body>
</html>

这适用于事件,但如果他们来到他们已经喜欢的页面,则不会触发事件。真实故事。为此,我们将“?fb_page_id=”附加到地址栏查询字符串(so..apps.facebook.com/your app/path/to/page.php?fb_page_id=123123)。这会将信息添加到发布的数据中。然而,不幸的是,FB有点不赞成这个功能,如果你禁用了他们的一些迁移选项,它将不起作用;Facebook从发布到应用程序的数据中删除/弃用/禁用了“fb_sig_is_fan”值。因此,我将编辑上面的代码以检查页面加载上的风扇年龄。这只是在我的数组中添加了一个名为“fb_page_id”的参数-我不知道这有什么作用?我应该看到一堆POST数据吗?这看起来很棒,现在可以试一试了。非常感谢:)你说的“页面”是什么意思?“Facebook页面”?