什么导致fb自动登录android,以及如何“等待”用户登录?

时间:2013-07-24 18:35:59

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

我正在使用phonegap / cordova 2.4和cordova的facebook插件。

情况1:将应用程序打开为“未登录用户”(=第一次):

app显示登录按钮 - >使用facebook用户登录&通过 - >注销按钮显示。

情况2:第二次打开应用程序(之前已登录):

app会自动将用户登录到 - >退出按钮显示。

这是我想要的行为,但我遇到了一个问题:

我使用jquery(.hide().show())来隐藏包含我的登录和注销按钮的div。问题是,在情境2中,login-div显示1或2秒,因为调节显示和隐藏div的代码在以下位置触发:

FB.Event.subscribe('auth.login', function(response) {

我的问题:

如何确保登录按钮仅在情境1中显示,而在情况2中不显示1-2秒?我试过这个:

function getLoginStatus() {
                FB.getLoginStatus(function(response) {
                                  if (response.status == 'connected') {
                                  //alert('logged in');
                                  } else {
                                  //alert('not logged in');
                                  $('#loggedin').hide();
                                   //show login button:
                          $('#loggedout').show();
                              $('#loading').hide();
                                  }
                                  });
            }
...
document.addEventListener('deviceready', function() {

try {
//alert('Device is ready!');
FB.init({ appId: "xxx", nativeInterface: CDV.FB, useCachedDialogs: false });
getLoginStatus();
...

getLoginStatus()的问题在于,在调用此函数时,用户实际上已注销。我的应用程序在此之后自动生成。我需要自动登录,但我想知道它是什么造成的......是FB.init吗?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

我想最好的办法是在SharedPreferences上保存一个检查“Logged”或“Not Logged”的布尔值,并在onCreate上检查,比通过互联网检查要快得多。

当您第一次登录并且日志正确时(id login_success)

if(login_success) {
 SharedPreferences settings = getSharedPreferences("key", MODE_PRIVATE);
 SharedPreferences.Editor editor = settings.edit();
 editor.putBoolean("bool_login",true);
 editor.commit();
}

现在,当您创建活动时,请在onCreate方法中检查此值:

 onCreate() {
 if(getSharedPreferences("key",MODE_PRIVATE).getBoolean("bool_login",false)) {
     //True only if bool_login is true
    //hide your box for login
}

希望澄清