0

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

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

应用程序显示登录按钮-> 使用 facebook 用户和密码登录-> 显示注销按钮。

情况2:第二次打开app(之前登录过):

应用程序自动将用户登录 -> 所示的注销按钮。

这是我想要的行为,但我面临一个问题:

我使用 jquery ( .hide()and .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 吗?

任何帮助深表感谢!

4

1 回答 1

1

我想最好的办法是在 SharedPreferences 上保存一个布尔值,用于检查“已记录”或“未记录”,然后在 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
}

希望澄清

于 2013-07-24T19:44:48.727 回答