我有一个移动网络应用程序(不是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
澄清:此后没有错误响应,也没有进一步的日志。重复单击共享按钮会产生完全相同的结果。
答案 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');
}
});