我目前正在使用Android工作室编写使用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也看到了: login demo on github
答案 0 :(得分:2)
当您的应用用户使用Firebase进行身份验证时,Firebase客户端会将令牌存储在用户Android设备的共享偏好设置中。因此,当应用重新启动时,用户已经过身份验证(除非令牌已过期)。
通常情况下,当Login()
获取onAuthStateChanged()
null
时,您只能致电authData
(或显示&#34;登录&#34;按钮) }}
答案 1 :(得分:0)
我建议您一旦登录到主Activity商店,就会在sharedPref中登录状态为&#34;已记录&#34;并转到您的主要活动。
下次用户打开应用时,检查sharedPref是否设置为&#34;已记录&#34;并将他移动到主Activity,并在mainActivity的onCreate()方法中使用Firebase对自己进行身份验证,从而维护Firebase中的已记录状态。
希望有所帮助!!