java - Una vez que inicie sesión en la aplicación-FirebaseAuth
android firebase-authentication (3)
Estoy trabajando en una aplicación que utiliza la autenticación Firebase para iniciar sesión en los usuarios a través del número de teléfono. Quiero agregar una funcionalidad tal que solo haya un inicio de sesión único para el usuario, es decir, incluso si el usuario mata la aplicación y la vuelve a iniciar, debería estar conectado. Además, no quiero agregar una función de cierre de sesión . ¿Qué se puede hacer para esto?
Esto es de mi código de trabajo de la clase de registro:
private void LoginUserAccount(String email, String password)
{
if (TextUtils.isEmpty(email))
{
Toast.makeText(ResponseStartPage.this, "Please write Your Email", Toast.LENGTH_SHORT).show();
}
if (TextUtils.isEmpty(password))
{
Toast.makeText(ResponseStartPage.this, "Please write Your password", Toast.LENGTH_SHORT).show();
}
else
{
loadingBar.setTitle("Login Account");
loadingBar.setMessage("Please wait for verification...");
loadingBar.show();
mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task)
{
if (task.isSuccessful())
{
String online_user_id = mAuth.getCurrentUser().getUid();
String DeviceToken = FirebaseInstanceId.getInstance().getToken();
usersReference.child(online_user_id).child("device_token").setValue(DeviceToken)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid)
{
Intent mainIntent = new Intent(ResponseStartPage.this, ResponseMainActivity.class);
mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(mainIntent);
finish();
}
});
}
else
{
Toast.makeText(ResponseStartPage.this, "Please Check your email and password", Toast.LENGTH_SHORT).show();
}
loadingBar.dismiss();
}
});
}
}
La forma más sencilla de lograr esto es usar un oyente.
Supongamos que tiene dos actividades,
LoginActivity
y
MainActivity
.
El oyente que se puede crear en
LoginActivity
debe tener este aspecto:
FirebaseAuth.AuthStateListener authStateListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
if (firebaseUser != null) {
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
}
};
Básicamente, esto significa que si el usuario ha iniciado sesión, omita
LoginActivity
y vaya a
MainActivity
.
Crea una instancia del objeto
FirebaseAuth
:
FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
Y comienza a escuchar los cambios en tu método
onStart()
como este:
@Override
protected void onStart() {
super.onStart();
firebaseAuth.addAuthStateListener(authStateListener);
}
En
MainActivity
, debes hacer lo mismo:
FirebaseAuth.AuthStateListener authStateListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
if (firebaseUser == null) {
Intent intent = new Intent(MainActivity.this, LoginActivity.class);
startActivity(intent);
}
}
};
Lo que básicamente significa que si el usuario no ha iniciado sesión, omita
MainActivity
y vaya a
LoginActivity
.
En esta actividad, debe hacer lo mismo que en
LoginActivity
, debe comenzar a escuchar los cambios en
onStart()
.
En ambas actividades, no olvide eliminar al oyente en el momento en que ya no sea necesario.
Entonces agregue la siguiente línea de código en su método
onStop()
:
@Override
protected void onStop() {
super.onStop();
firebaseAuth.removeAuthStateListener(authStateListener);
}
Puede guardar la sesión de inicio de sesión del usuario en Preferencia compartida
Haga esto cuando su inicio de sesión se haya iniciado correctamente.
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", Activity.MODE_PRIVATE);
Editor editor = pref.edit();
editor.putBoolean("key_name", true); // Storing boolean - true/false
editor.commit();
y cuando se inician sus aplicaciones (como Splash o la página de inicio de sesión) use esta
SharedPreferences sp=this.getSharedPreferences("MyPref", Context.MODE_PRIVATE);
boolean b = sp.getBoolean("key_name", false);
if(b==true){
//User Already Logged in skip login page and continue to next process
}else{
//User is Not logged in, show login Form
}
Funcionará para usted.