我正在将facebook登录添加到我的应用程序中,但是我遇到了SDK方法中的一个问题,我已经创建了我自己的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中。
发布于 2018-08-12 17:07:26
我不知道我的其中一个建议是什么问题,但我要把它变成一个答案:
FB.getLoginStatus
只应在fbAsyncInit
中使用,仅次于FB.init
https://stackoverflow.com/questions/51810300
复制相似问题