Facebook JS SDK getLoginStatus 不一致的行为



我正在将Facebook登录添加到我的应用程序中,但是我遇到了SDK方法之一 -FB.getLoginStatus我已经创建了自己的SDK包装器,并公开了一些主要方法。

/*eslint-disable no-undef*/
class FacebookSDK{
constructor(options = {}){
this.options = options;
}
isSdkLoaded(){
return typeof FB !== 'undefined';
}
init(){
window.fbAsyncInit = () => {
FB.init(this.options);
}
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "https://connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
return new Promise(resolve => {
const checkIfSdkIsLoaded = () => {
this.isSdkLoaded() ? resolve() : setTimeout(checkIfSdkIsLoaded, 100);
}
checkIfSdkIsLoaded();
});
}
login(){
return new Promise((resolve, reject) => {
FB.login(function(response) {
if (response.authResponse) {
FB.api('/me', function(user) {
resolve(user);
});
} else {
reject(response);
}
});
});
}
getLoginStatus(){
return new Promise((resolve, reject) => {
FB.getLoginStatus(function(response) {
console.log(response);
if (response.authResponse) {
FB.api('/me', function(user) {
resolve(user);
});
} else {
reject(response);
}
});
});
}
}
export default FacebookSDK;

但是,当调用getLoginStatus时,我的代码"挂起",因为并不总是调用回调。 有时它被称为,有时它不是。

我正在我的本地机器上开发http://localhost/

我将localhost添加到我的"应用程序域"部分,并且还向站点 URL 添加了http://localhost/

不确定我的哪一个建议是问题所在,但我正在将其转化为答案:

  • 也许幽灵或其他一些浏览器插件正在阻止Facebook SDK
  • FB.getLoginStatus只能在fbAsyncInit中使用,在FB.init之后立即使用

最新更新