有时可以'使用JS API获取FB id

Sometimes can't get FB id with JS API

本文关键字:API JS 获取 FB id 使用      更新时间:2023-09-26

在大约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'
            });
        }
    });
}

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

  • FB.getLoginStatus on page load刷新用户令牌并检查用户是否获得授权
  • FB.点击鼠标登录

这样也更容易删除一些多余的代码,并将FB.api调用转移到函数中。

它可能会也可能不会解决你的问题,但它绝对是重要的,也是常见的错误来源。