我目前正在使用Android Studio编写一个应用程序,使用Firebase。我的问题是,当我登录后如何在整个应用程序的生命周期中保持登录状态,直到我选择退出登录。
到目前为止,在MainActivity中我已经做了以下工作:
/* *************** IN MAINACTIVITY *************** */
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/* Firebase init */
Firebase.setAndroidContext(this);
rootRef = new Firebase(URL);
/* Other Android code
...
*/
firebaseAuthLisener = new Firebase.AuthStateListener() {
@Override
public void onAuthStateChanged(AuthData authData) {
if (authData != null) {
// user is logged in
System.out.println("Logged in!");
} else {
// user is not logged in
System.out.println("Not logged in!");
}
}
};
}
/* The Login function gets me to the LoginActivity */
public void Login() {
Intent intent = new Intent(this, LoginActivity.class);
int reqCode = 1;
startActivityForResult(intent, reqCode);
}
当调用Login()
函数时,我会进入LoginActivity,目前我在LoginActivity中所做的是
/* *************** IN LOGINACTIVITY *************** */
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/* Firebase init */
rootRef = new Firebase(URL);
/* Other Android code
...
*/
loginResultCallback = new Firebase.AuthResultHandler() {
@Override
public void onAuthenticated(AuthData authData) {
activityDone();
}
@Override
public void onAuthenticationError(FirebaseError firebaseError) {
System.out.println("Error couldn't login");
}
};
}
/* The loginFirebase function logs me into the Firebase */
public void loginFirebase() {
rootRef.authWithPassword("EMAIL", "PASSWORD", loginResultCallback);
}
/* The activityDone function returns me to MainActivity */
public void activityDone() {
Intent resultForMainActivityIntent = new Intent();
setResult(Activity.RESULT_OK, resultForMainActivityIntent);
finish();
}
如前所述,当我调用activityDone()
后,如何在整个应用程序的生命周期内保持我的登录状态,直到我选择注销?
编辑:如果其他人发现这个帖子,我在这里做错的事情实质上是没有使用回调,另一种重写MainActivity的方法:
/* *************** IN MAINACTIVITY *************** */
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/* Firebase init */
Firebase.setAndroidContext(this);
rootRef = new Firebase(URL);
/* Other Android code
...
*/
rootRef.addAuthStateListener(new Firebase.AuthStateListener() {
@Override
public void onAuthStateChanged(AuthData authData) {
Log.i(">firebaseAuthLisener<", "[CALLED]");
if (authData != null) {
// user is now logged in
System.out.println("Logged in!");
} else {
// user is not logged in
System.out.println("Not logged in!");
}
}
});
}
/* The Login function gets me to the LoginActivity */
public void Login() {
Intent intent = new Intent(this, LoginActivity.class);
int reqCode = 1;
startActivityForResult(intent, reqCode);
}
现在应该在从LoginActivity返回后立即执行。感谢Frank van Puffelen的贡献,还可以参考:github上的登录演示
onAuthStateChanged()
不会自动调用。也许我应该在代码中的某个地方手动启动它(在这种情况下检查用户特定资源如UID的正确方法是什么)? - user5586509LoginActivity
。当您在MainActivity.onCreate()
中注册时,AuthStateListener.onAuthStateChanged()
应立即触发。如果这对您没有发生,请在 github 上设置一个 mcve? - Frank van Puffelen