我正在将Facebook登录名添加到我的应用程序中,但是我遇到了一种使用SDK方法之一的issus-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
添加到了我的“应用程序域”部分,并且还将http://localhost/
添加到了站点URL。
答案 0 :(得分:1)
不确定我的建议中哪个是问题,但我正在将其变成答案:
FB.getLoginStatus
仅应在fbAsyncInit
之后的FB.init
中使用