Facebook FB.getLoginStatus未调用其回调

Facebook FB.getLoginStatus未调用其回调,facebook,fbjs,Facebook,Fbjs,标题真的说明了一切。在某些(未确定的)条件下,FB.getLoginStatus()会停止工作,并且不会调用我给它的回调。我发现的唯一有趣的线索是 FB.Auth.\u loadState被卡在“加载”状态——任何应该让它点击“加载”的东西都不会发生 轻微的延迟,如放入alert()调用,往往会使它开始工作 任何关于如何调查此欢迎的提示。可能您正在使用异步调用。当我用window.fbasyninit调用FB.init时也发生了同样的事情。我所做的只是使用setTimeout函数延迟FB.g

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

  • FB.Auth.\u loadState被卡在“加载”状态——任何应该让它点击“加载”的东西都不会发生
  • 轻微的延迟,如放入
    alert()
    调用,往往会使它开始工作

任何关于如何调查此欢迎的提示。

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

window.setTimeout(checkLogStatus,1000);
函数checkLogStatus(){
警惕(“检查”);
//获取加载状态
FB.getLoginStatus(handleSessionResponse);
}

在那之后,它似乎起到了作用。这通常发生在我在Facebook上注册的另一个域下运行页面时。通常这是我在本地开发的时候

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

根据:


您不能将应用程序置于沙盒模式下,否则它将无法工作。进入你的应用程序设置,高级,然后切换它。这让我困惑了几个小时,直到我偶然发现了bug报告。

我在FBAPI上也遇到了类似的问题。事实证明,我的Facebook应用程序配置错误。请确保您的情况并非如此。我的问题是,FB应用程序中的“站点URL”参数指向的是https,但我使用的是http协议进行开发。
FB.init
之后对FB api的任何调用都没有调用我的回调函数。因此,首先要做的是仔细检查应用程序配置

现在,如果出于某种原因,您依赖FBAPI,但希望有一个备用选项,以防出现这种情况;s不工作-使用定时器的变通方法应该适合您。只要设置一个计时器,并禁用它,如果FBAPI给你正确的响应。如果没有-回退到某个自定义函数,该函数将执行一些附加逻辑

函数callFbApi(){
var timeoutHandler=setTimeout(函数(){requestFailed();},1000);
函数requestFailed(){
//发生这种情况时,意味着FBAPI没有响应
doSomeFallbackWork();
警报(“嘿,FB API不工作!”);
}
FB.getLoginStatus(函数(响应){
clearTimeout(timeoutHandler);//这将在正确的FB调用情况下清除超时
dosomeusualworkafterfbrepries();
返回false;
},对);
}

在新版开发者应用程序中,您必须确保在“网站”字段中的

选择应用程序与Facebook的集成方式


部分。

如果您的应用程序处于沙箱模式,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>
应用程序错误:获取您请求的应用程序的数据时出现问题。应用程序可能无效,或者可能存在临时故障。请稍后再试。
有关更多信息,请参阅我对此错误通知单的评论:

正如其他人所发布的,您必须以facebook所期望的相同URL访问您的网站。例如,如果facebook有一个回调“example.com”,但您的浏览器有“www.example.com”,则可能会导致此问题


此外,如果您的浏览器不允许使用第三方cookie,您也可能会看到此问题。或者您可能会看到回调。

只是发布了一个我打电话给FB时遇到的情况。getLoginStatus完全没有得到响应


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

确保协议是HTTPS而不是HTTP。

我也遇到过类似的问题。每次我打开浏览器时,该网站都能正常工作,但当我尝试重新加载时,该网站就失败了


原因是Facebook配置上的网站名缺少“www”。请注意,在两种情况下(yoursite.com或www.yoursite.com)都可以使用“www”(如www.yoursite.com)。

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

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


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

在用户删除您的应用程序后,这种情况就会可靠地发生。我也经历过这种情况。您是否收到带有Facebook错误消息的Facebook登录弹出窗口,或者弹出窗口根本没有发生?对我来说,弹出窗口停止工作(并且它没有被阻止——只是没有被调用,JavaScript中也没有回调)!最后几年前我就创建了一个facebook应用程序,但从来没有改变过URL。FB没有提供有用的错误消息,这让我感到羞愧。没有任何客户端OAuth设置