如果用户没有登录Facebook,FB.getLoginStatus不会触发。

10

我正在开发一个与Facebook集成的Facebook应用程序,并试图获取用户的FB会话。据我所了解,一般使用情况如下:

  1. 调用FB.init()
  2. 调用FB.getLoginStatus 并给它适当的回调函数。

我运行了以下代码(应用ID)。

<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script type="text/javascript">
    <!--

    function init(){
        FB.init({
            appId  : '9999999999999',
            status : true, // check login status
            cookie : true, // enable cookies to allow the server to access the session
            xfbml  : true, // parse XFBML
            channelUrl : 'http://127.0.0.1:8888/channel.html', // custom channel
            oauth  : true // enable OAuth
        });
        alert('going to call FB.getLoginStatus ');

        FB.getLoginStatus(function(response) {
            alert('whoo hoo!!! getLoginStatus called the callback');
        });
    }
    init();
    //-->
</script>
如果用户在同一浏览器会话中已经登录Facebook,则一切都按预期工作-返回填充的_response.authResponse_。但是,如果用户没有登录Facebook,则回调根本不会触发。通过检查浏览器的网络日志,我看到Facebook返回以下响应(从http://www.facebook.com/dialog/oauth请求)。

应用程序错误:获取您请求的应用程序数据时出现问题。该应用程序可能无效,或者可能存在临时故障。请稍后再试。

我在Chrome和Firefox(Mac)上进行了检查。 更新 我想感谢所有回答的人。 Ben的评论给出了答案。
谢谢Ben - 你为我节省了很多沮丧。

12
您的应用程序是否处于沙盒模式?如果是,似乎存在一个可能导致此问题的错误:http://bugs.developers.facebook.net/show_bug.cgi?id=19359 - Ben Regenspan
你是在使用loopback作为channelUrl吗?还是只是举例呢?我不认为loopback会对该功能起作用。 - ShawnDaGeek
这里解释了channelUrl的使用方式(https://developers.facebook.com/docs/reference/javascript/FB.init/)。显然,它可以加快加载时间并帮助避免一些问题。虽然在开发时我并不太关心它是否有用,但在上线后应该会有所帮助。 - Nitzan Volman
2个回答

12

问题的原因是最近出现了一个bug,只影响沙盒模式。我关闭了沙盒模式,它就像魔法一样正常工作了。


1
我真想亲吻你!非常感谢。我整晚都在尝试和尝试各种东西...我不明白发生了什么...Facebook干得好。6个月后,问题仍然存在... - curly_brackets

1

尝试强制加载事件:

FB.getLoginStatus(function(response) {
    alert('whoo hoo!!! getLoginStatus called the callback');
}, true);

FB.getLoginStatus中已经说明了。

在某些情况下,事件可能不会被触发。


将 true 添加以强制加载,解决了我的无响应问题! - user910533

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接