FB登录失败(没有错误,没有什么)

FB Login failing (no error, no nothing)

本文关键字:什么 有错误 失败 FB 登录      更新时间:2023-09-26

我有一个移动网络应用程序(不是iOS),我正试图使用共享对话框。我正在记录整个过程的输出,这样我就可以看到系统在哪里出了问题。当我在桌面浏览器上进行测试时,整个过程非常完美。然而,当我在iPhone上测试时,系统停在FB.login()处。查看日志,我的web应用程序运行FB.getLoginStatus()很好。响应是一个status="unknown"的对象。我有一个回调函数,记录"getLoginStatus响应"。status !=已连接",然后尝试运行FB.login(function(response){})。回调的第一行是尝试记录"FB"。登录反应"。这条线永远不会被记录。什么也不会发生。这就好像web应用程序到达FB.login(),然后不做任何事情。我试过在那个地方运行其他函数(如FB.api()),他们给我正确的错误(没有authToken)。知道是怎么回事吗?

示例代码:

FB.getLoginStatus(function(response) {
    console.log('getLoginStatus response:');
    console.log(response);
    if(response.status != 'connected') {
        console.log('getLoginStatus response.status != connected'); // THIS IS THE LAST THING I SEE IN MY CONSOLE
        FB.login(function(response) {
            console.log('FB.login response');
            console.log(response);
            if(response.status != 'connected') {
                console.log('Failed to log in');
            } else {
                console.log('You''re logged in');
            }
        });
    } else {
        console.log('You''re logged in');
    }
});

产生以下日志:

getLoginStatus response:
Object {status: "unknown", authResponse: null} 
getLoginStatus response.status != connected 

澄清:在此之后没有错误响应和进一步的日志。重复单击共享按钮会产生完全相同的结果。

OK -找到问题了。我在最初的问题中省略的是,这些都是在Angular.js应用程序中调用的。好吧,事实证明FB.login()函数需要在下一个周期中调用。通过简单地包装FB。AngularJS:在调用$scope时防止错误$digest已经在进行中。$apply()允许它在下一个循环中运行,现在一切都正常了。结束代码如下所示:

FB.getLoginStatus(function(response) {
    console.log('getLoginStatus response:');
    console.log(response);
    if(response.status != 'connected') {
        console.log('getLoginStatus response.status != connected'); 
        $timeout(function(){ //THIS IS THE FIX
            FB.login(function(response) {
                console.log('FB.login response');
                console.log(response);
                if(response.status != 'connected') {
                    console.log('Failed to log in');
                } else {
                    console.log('You''re logged in');
                }
            });
        });
    } else {
        console.log('You''re logged in');
    }
});