我目前正在使用 Android Studios 编写一个使用 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()
在我的应用程序的整个生命周期中保持登录状态,直到我选择注销?
EDIT:如果其他人发现了这个线程,我在这里做错的本质上是没有使用回调,另一种重写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上的demo https://github.com/firebase/firebase-login-demo-android