有时无法使用JS API获取FB id

时间:2014-10-31 09:05:13

标签: javascript facebook

在大约0.3%的用户中,我无法使用JS API获取他们的FB ID。在某些情况下,我已经为这些用户提供了它。可能是什么原因以及如何解决这个问题?

据我所知,大多数用户都使用的是Windows并使用firefox。

我的代码:

window.fbAsyncInit = function () {
    FB.init({
        appId : "xxxx",
        status : true,
        cookie : true,
        xfbml : true,
        oauth : true
    });
    FB.Canvas.setSize({width:$("#mainbody").outerWidth(),height:$("#mainbody").outerHeight()});
    FB.getLoginStatus(function (response) {
        if(response.authResponse){
            if(response.authResponse.userID){
                fbId = response.authResponse.userID;
                $("#hiddenFbId").val(fbId);
                setSession();
            }
        }
        if (response.status === 'connected') {
            FB.api(
                "/me?locale=et_EE",
                function (response) {
                if (response && !response.error) {
                    fbName = response['name'];
                    fbId = response['id'];
                    $("#hiddenFbId").val(fbId);
                    fbEmail = response['email'];
                    setSession();
                }
            });
        } else {
            FB.login(function (response) {
                if (response.authResponse) {
                    if(response.authResponse.userID){
                        fbId = response.authResponse.userID;
                        $("#hiddenFbId").val(fbId);
                        setSession();
                    }
                    FB.api(
                        "/me?locale=et_EE",
                        function (response) {
                        if (response && !response.error) {
                            fbName = response['name'];
                            fbId = response['id'];
                            $("#hiddenFbId").val(fbId);
                            fbEmail = response['email'];
                            setSession();
                        }
                    });
                } else {
                    fbDenied = true;
                }
            }, {
                scope : 'public_profile,email,user_likes'
            });
        }
    });
}

1 个答案:

答案 0 :(得分:0)

永远不要在FB.getLoginStatus的异步(!)回调函数中调用FB.login。有些浏览器会阻止登录弹出窗口,如果你这样做,你总是需要在用户交互时调用FB.login - 并且无论如何在页面加载时调用它是一个坏主意。不要强迫用户在他们进入您的应用程序时以及在他们知道您的应用程序的内容之前授权您的应用程序。

  • 页面加载时FB.getLoginStatus刷新用户令牌并检查用户是否获得授权
  • 点击鼠标时的FB.login

删除一些冗余代码并将FB.api调用移动到函数也更容易。

它可能会或可能不会解决您的问题,但这绝对是重要的,也是错误的共同来源。