Facebook登录没有响应FB.login响应

问题描述:

我正在与facebook集成的android phonegap应用程序。 FB.login(函数(响应)函数有一个响应处理函数,它在 用户点击fb按钮时被调用,但它每次都没有进入函数响应 或alert('test'),它会进入这个脚本只有当我点击 约5或6次。我需要的是在第一次登录Facebook时获取访问令牌。我已经通过了很多关于此的链接,但 无法找到一个确切的解决方案。 。Facebook登录没有响应FB.login响应

FB login callback function not responding if user is already logged in facebook

即使这个问题似乎是相同的,但我不能弄明白我的解决方案。

这是代码上午工作:

<div id="data">Hello Facebooktesters, loading ...</div> 

<button onclick="login()">Login</button> 
<button onclick="me()">Me</button> 
<button onclick="logout()">Logout</button> 
<button onclick="Post()">facebookWallPost</button> 

<script type="text/javascript"> 
    document.addEventListener('deviceready', function() { 
     try { 
      alert('Device is ready! Make sure you set your app_id below this alert.'); 
      FB.init({ 
       appId : "xxxxxxxxxxxxxxx", 
       nativeInterface : CDV.FB, 
       useCachedDialogs : false 
      }); 
      document.getElementById('data').innerHTML = "FB init executed"; 
     } catch (e) { 
      alert(e); 
     } 
    }, false); 

    function me() { 
     FB.api('/me/friends', { 
      fields : 'id, name, picture' 
     }, function(response) { 
      if (response.error) { 
       alert(JSON.stringify(response.error)); 
      } else { 
       var data = document.getElementById('data'); 
       fdata = response.data; 
       console.log("fdata: " + fdata); 
       response.data.forEach(function(item) { 
        var d = document.createElement('div'); 
        d.innerHTML = "<img src="+item.picture+"/>" + item.name; 
        data.appendChild(d); 
       }); 
      } 
      var friends = response.data; 
      console.log(friends.length); 
      for (var k = 0; k < friends.length && k < 200; k++) { 
       var friend = friends[k]; 
       var index = 1; 

       friendIDs[k] = friend.id; 
       //friendsInfo[k] = friend; 
      } 
      console.log("friendId's: " + friendIDs); 
     }); 
    } 

    function login() { 
     FB.login(function(response) { 
      alert('test'); 
      if (response.authResponse) { 
       alert('logged in'); 
       var access_token = FB.getAuthResponse()['accessToken']; 
       alert(access_token); 
       window.location = "test.html" 
      } else { 
       alert('not logged in'); 
      } 
     }, { 
      scope : "email" 
     }); 
    } 

    function logout() { 
     alert('test'); 
      FB.logout(function(response) { 
       alert('logged out'); 
      //window.location.reload(); 
      }); 
    } 

    function Post(ele) { 
     var domain = 'http://192.168.0.46:8082/'; 
     console.log('Debug 1'); 
     var params = { 
     method: 'feed', 
     name: 'test - test', 
     link: domain+'test/test/showproddetails.action?product.productId=1', 
     picture: 'http://www.careersolutions.com/test.png', 
     caption: 'test', 
     description: 'test' 
     }; 
     console.log(params); 
     FB.ui(params, function(obj) { console.log(obj);}); 
    } 

</script> 

谢谢 拉吉

你缺少分号这行:

window.location = "test.html"

+0

不,在(大多数)情况下JavaScript中的分号是_optional_,其中在一行代码中只有一个表达式。 – CBroe

+0

是的,你是对的。然而,有些编译器会一直抱怨,直到你修正你的语法。有时它会导致你的代码崩溃。上面的代码在移植到浏览器时工作正常,所以我认为这可能是问题:) 感谢提出问题。 – Maz

这个问题问得不久前发布,但我想指出一些事情。 FB.login函数打开一个弹出对话框询问用户是否想使用Facebook登录到您的应用程序。通常建议在单击按钮后运行它,因为大多数浏览器会在加载页面时阻止弹出对话框。如果用户之前已授权您的应用程序,那么弹出对话框将重定向回您的应用程序并关闭对话框(假设您的应用程序是一个网站)。

如果你打算做的是检查用户是否登录到在页面加载你的应用程序,那么我们建议你改用FB.getLoginStatus方法,像这样

function checkLoginState() { 
    FB.getLoginStatus(function(response) { 
     // Check response.status to see if user is logged in 
     alert(response.status); 
    }); 
} 

参考this extensive documentation on facebook