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

时间:2014-07-18 00:17:27

标签: javascript facebook angularjs

我有一个移动网络应用程序(不是iOS),我正在尝试使用共享对话框。我正在记录整个过程的输出,所以我可以看到系统崩溃的位置。当我在桌面浏览器上进行测试时,整个过程非常完美。但是,当我在iPhone上测试时,系统会在FB.login()处停止。查看日志,我的webapp运行FB.getLoginStatus()就好了。响应是status =“unknown”的对象。我有一个回调函数,它记录“getLoginStatus response.status!= connected”,然后尝试运行FB.login(function(response){})。回调的第一行是尝试记录“FB.login响应”。该行永远不会被记录。什么都没发生。这就像webapp到达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 

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

1 个答案:

答案 0 :(得分:1)

好的 - 发现了问题。我在最初的问题中省略的是,这一切都是在Angular.js应用程序中调用的。好吧,事实证明FB.login()函数需要在下一个周期中调用。因此,只需在$ timeout中包装FB.login函数(根据这里的答案:AngularJS : Prevent error $digest already in progress when calling $scope.$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');
    }
});