Utilizo firebase para el inicio de sesión de un usuario con email y contrasena, todo funciona bien, solo que necesito que al cerrar la app y volver a abrirla, la sesión siga abiera. Lei que podria utilizar SharedPreferences pero no encuentro una solución real a lo que quiero hacer. Esta es mi función para inicializar Firebase en mi aplicación
private void inicialize() { firebaseAuth = FirebaseAuth.getInstance(); authStateListener = new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { FirebaseUser firebaseUser = firebaseAuth.getCurrentUser(); if (firebaseUser != null) { Log.w(TAG, "onAuthStateChanged - Logueado"); } else { Log.w(TAG, "onAuthStateChanged - Cerro sesion"); } } }; }
Esta función la utiliza para hacer el inicio de sesión
private void signIn(String email, String password) { firebaseAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()){ Toast.makeText(LoginActivity.this, "Autenticacion correcta", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(LoginActivity.this, MainActivity.class); startActivity(intent); finish(); } else { Toast.makeText(LoginActivity.this, "Autenticacion incorrecta", Toast.LENGTH_SHORT).show(); } } }); }
Y en el onCreate de LoginActivity utilizo un botón que se encarga de realizar la función del logueo
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); etUsuario = (EditText) findViewById(R.id.etUsuario); etPassword = (EditText) findViewById(R.id.etPassword); Button btnIngresar = (Button) findViewById(R.id.btn_ingresar); Button btnAbrirCrearCuenta = (Button) findViewById(R.id.btnAbrirCrearCuenta); //Inicializamos firebase inicialize(); //Al presionar Boton de Ingresar se ejecuta la funcion de Firebase btnIngresar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //Validamos los inputs String email = etUsuario.getText().toString().trim(); String password = etPassword.getText().toString().trim(); if (TextUtils.isEmpty(email)) { Toast.makeText(LoginActivity.this, "Ingrese un usuario", Toast.LENGTH_SHORT).show(); return; } if (TextUtils.isEmpty(password)) { Toast.makeText(LoginActivity.this, "Ingrese una contrasena", Toast.LENGTH_SHORT).show(); return; } signIn(etUsuario.getText().toString(), etPassword.getText().toString()); } });
Como podria guardar los datos del usuario logueado y que al abrir de nuevo la aplicacion (siempre y cuando no haya dado Cerrar Sesión), pueda abrir directamente mi MainActivity sin tener que introducir los datos de nuevo.