4

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

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

如果我进入 Facebook 并从我的 FB 帐户中删除应用程序“测试”,然后再次运行 android 应用程序并运行 getLoginStatus() 函数仍然说我已将应用程序“测试”注册到我的 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);
      }

任何回应都会非常感激!

4

2 回答 2

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 但尚未授权您的应用时,您将获得 not_authorized。如果你把这个人转移到facebook主页,他输入用户名和密码并取消授权,然后你就没有被授权。如果该人已登录 facebook,并且您的应用尚未将他转移到 fb 进行授权,您仍然没有获得授权

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

未知:如果用户未登录 facebook,您将获得未知状态。

所以登录,未授权:not_authorized 未登录:未知

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

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

于 2013-08-03T06:24:29.227 回答
2

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

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

至于您的第二个问题,您看到的问题是因为默认情况下,该getLoginStatus函数出于性能原因缓存其响应。但是,它们为您提供了一种强制刷新状态的方法。您可以通过将第二个参数传递ForcegetLoginStatus.

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.

Force您可以通过查看上述 API 文档链接并搜索“Force”参数来了解有关该参数的更多信息。

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

于 2013-08-03T03:37:56.657 回答