java android firebase firebase-authentication

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.