Facebook getLoginStatus()函数和phonegap没有更新状态

时间:2013-07-24 20:34:55

标签: facebook cordova facebook-javascript-sdk phonegap-plugins

我目前正在Android上使用phonegap开发应用程序,并希望在应用程序中使用Facebook。我在Facebook上创建了一个名为“Test”的应用程序。当我没有登录“测试”但我登录Facebook(Android设备上的Facebook应用程序)并运行getLoginStatus()函数时,我得到unknown而不是not_authorized的回复。因此我的第一个问题是这个意图吗?我的意思是得到unknown的回复,或者这是来自phonegap的错误,我的意思是得到not_authorized的回复。

第二个问题是,当我登录名为“test”的Facebook应用程序时,一切都按预期运行(Facebook用户注册为“test”)。当我调用getLoginStatus()函数时,它工作得非常好并说我连接没有问题。

BUT

如果我进入Facebook并从我的FB帐户中删除应用程序“test”,然后再次运行Android应用程序并运行getLoginStatus()函数,STILL说我的应用程序“test”已注册到我的Facebook帐户但是情况并非如此!!请注意,我在代码中确保每次都调用服务器而不是使用JS SDK的缓存结果。现在我的第二个问题是。这是否意味着发生?或者如果不是Facebook或Phonegap问题(Phonegap要么继续获得缓存的响应,要么Facebook不能足够快地更新他们的一面?)

这是代码:

function getLoginStatus() 
      {
          FB.getLoginStatus(function(response) 
          {
            alert(JSON.stringify(response));
            alert(response.status);
            if (response.status == 'connected') 
            {
              alert('logged in');
                FB.api('/me',function (response) {
                    if (response.error)
                    {
                        alert('There is an error');
                    }
                    else
                    {
                        alert(response.name);
                    } 
                });


            }
            else 
            {
              alert('not logged in');
            }
           },true);
      }

真的很感激任何回应!!

2 个答案:

答案 0 :(得分:4)

When I am not logged into "Test" but I am logged into Facebook (Facebook app on the Android device) and run the getLoginStatus() function I get a response of unknown instead of not_authorized.

not_authorized:当用户登录Facebook但未授权您的应用时,您获得了未授权。如果您将该人转移到Facebook主页,他会输入用户名和密码并取消授权,此后您将无法获得授权。如果这个人登录到Facebook,并且您的应用尚未将他转移到fb进行授权,那么您仍未获得授权

https://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/

未知:如果用户未登录Facebook,则会显示未知状态。

已登录,未经授权:未授权 未登录:未知

If I go into Facebook and remove the app "test" from my FB account

我猜这些改变需要一段时间才能传播。如果用户已在当前上下文中授权应用程序,则它将在一段时间内保持授权(或直到他注销)。我认为这个人没有任何问题

答案 1 :(得分:2)

这不是电话号码问题。 unknowngetLoginStatus函数的有效回复之一。有关此功能的信息,请参阅facebook API documentation。在那里,他们将unknown响应描述为:

  

用户此时未登录Facebook,因此我们不知道他们是否已对您的应用程序进行身份验证(未知)

关于您的第二个问题,您看到的问题是因为默认情况下,getLoginStatus函数会出于性能原因缓存其响应。但是,它们为您提供了强制刷新状态的方法。您可以通过将第二个参数Force传递给getLoginStatus来完成此操作。

FB.getLoginStatus(function(response) {
  // this will be called when the roundtrip to Facebook has completed
}, true); // The second parameter, called 'force' by default is False. True signifies that you want to force a call to the server so you can see the latest login status.

您可以通过查看上面的API文档链接并搜索“强制”参数来详细了解该Force参数。

顺便说一下,我已经暂时删除了答案,因为我在不知道如何回答第二个问题的情况下回答了问题,但是在找到问题背后的原因后将其取消删除。