FB.getLoginStatus没有调用它的回调

时间:2011-03-04 03:05:03

标签: facebook fbjs

标题真的说明了一切。在某些(未确定的)条件下,FB.getLoginStatus()只是停止工作,不会调用我给它的回调。我发现的唯一有趣的线索是

  • FB.Auth._loadState停留在“加载” - 无论是什么使它点击“加载”都没有发生
  • 轻微延迟,例如投入alert()来电,往往会让它开始工作

关于如何调查这种欢迎的任何暗示。

11 个答案:

答案 0 :(得分:29)

当我在与Facebook注册的域名不同的域名下运行页面时,通常会发生这种情况。通常这是我在本地开发的时候。

如果您在本地运行,则必须设置本地Web服务器,然后修改hosts文件以将注册域指向127.0.0.1,以便在本地计算机上进行测试。如果要在服务器上测试它,请忘记从hosts文件中删除该行。

答案 1 :(得分:12)

根据:

https://developers.facebook.com/bugs/240058389381072

您无法将您的应用程序置于沙箱模式下,否则它将无法运行。进入您的应用设置,高级并切换它。这让我困扰了几个小时,直到我碰巧发现错误报告。

答案 2 :(得分:12)

我遇到了与FB API类似的问题。事实证明,我的Facebook应用程序配置错误。请确保您不是这种情况。我的问题是FB应用程序中的“站点URL ”参数指向 https ,但我使用http协议进行开发。 FB.init之后对FB api的任何调用都没有调用我的回调函数。所以要做的第一件事应该是仔细检查App配置。

现在,如果某种原因你依赖于FB api,但是你希望有一个后备选项,以防它不起作用 - 使用计时器的解决方法应该没问题。如果FB Api给你正确的响应,只需设置一个计时器并禁用它。如果不是 - 回退到一些自定义函数,它将执行一些额外的逻辑。

 function callFbApi() {
    var timeoutHandler = setTimeout(function() { requestFailed(); }, 1000);

    function requestFailed() {
        // When this happens, it means that FB API was unresponsive
        doSomeFallbackWork();
        alert('hey, FB API does not work!');
    }

    FB.getLoginStatus(function(response) {
        clearTimeout(timeoutHandler); // This will clear the timeout in case of proper FB call
        doSomeUsualWorkAfterFbReplies();

        return false;
    }, true);
 }

答案 3 :(得分:6)

也许你正在使用异步调用。当我用window.fbAsyncInit调用FB.init时发生了同样的事情。我所做的只是使用setTimeout函数延迟FB.getLoginStatus

  window.setTimeout(checkLogStatus, 1000);


  function checkLogStatus(){
          alert("check");
          // fetch the status on load      
          FB.getLoginStatus(handleSessionResponse);
  }

之后似乎有效

答案 4 :(得分:5)

如果您的应用程序处于沙盒模式,那么Facebook的行为就好像您的应用程序对于未列为应用程序开发人员的任何人都不可见。如果您还没有登录,那么您的应用程序现在是不可见的。

只有在使用可见应用程序进行初始化时才会触发回调。否则返回以下响应:

<span>Application Error: There was a problem getting data for the application you requested. The application may not be valid, or there may be a temporary glitch. Please try again later. </span>

有关详细信息,请参阅我对此错误提单的评论: https://developers.facebook.com/bugs/240058389381072

答案 5 :(得分:1)

在新版本的开发者应用中,您必须确保在

下的网站字段中输入正确的URL以访问该应用程序

选择您的应用与Facebook集成的方式

部分。

答案 6 :(得分:1)

确保协议 HTTPS 而不是HTTP。

答案 7 :(得分:1)

我有类似的问题。我每次打开浏览器时都会工作,但在我尝试重新加载时失败了。

原因是Facebook配置上网站名称上缺少“www”。请注意,“www”(如www.yoursite.com)适用于这两种情况(yoursite.com或www.yoursite.com)。

答案 8 :(得分:0)

正如其他人发布的那样,您必须使用Facebook预期的相同网址访问您的网站。例如,如果facebook有一个回调“example.com”,但你的浏览器有“www.example.com”,那可能会导致这个问题。

此外,如果您的浏览器不允许使用第三方Cookie,您可能也会看到此问题。或者您可能会看到回调erroneously reporting the user is not connected

答案 9 :(得分:0)

只是发布我曾打电话给FB.getLoginStatus的情况绝对没有回复。

我的应用程序设计为在标签页中运行,我只在应用管理页面上输入页面标签网址,而不是 Facebook在Facebook上(即Canvas) )URL。选项卡加载完美,但对FB JS SDK的任何调用都不会引起响应。

答案 10 :(得分:-1)

在Facebook应用设置中,转到客户端OAuth设置,查看有效的OAuth重定向URI

确保列出了所有URI,这些URI都是从中调用Facebook SDK的域。例如:

enter image description here

我在localhost:5000开发并部署到Heroku。请注意格式:http://domain.name/