首页 > 解决方案 > 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/

我将 to 添加localhost到我的“应用程序域”部分,并且还添加http://localhost/到站点 URL。

标签: javascriptfacebookfacebook-javascript-sdkfacebook-login

解决方案


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

  • 可能 ghostery 或其他浏览器插件阻止了 Facebook SDK
  • FB.getLoginStatus应该fbAsyncInit只在之后使用FB.init

推荐阅读