studio programacion para móviles libros gratis español desarrollo desarrollar curso con aprende aplicaciones android firebase firebase-authentication

programacion - Cerrar correctamente un usuario de la aplicación de Android



manual programacion android español pdf (6)

Cuando Firebase autentica al usuario (o usted lo autentica con Firebase), almacena el token para ese usuario en el almacenamiento local de su dispositivo. Esto sucede cuando llama a uno de los métodos authWith... (por supuesto, solo si autentica al usuario con éxito).

Llamando ref.unauth(); elimina inmediatamente ese token del almacenamiento local.

Un flujo implementado correctamente no los volvería a autenticar automáticamente cuando el usuario presiona el botón de retroceso, pero eso depende del flujo que implementes (lo que falta en tu pregunta y probablemente sea demasiado código de todos modos).

Estoy desarrollando una pequeña aplicación para Android, y básicamente hasta ahora solo tiene funciones de inicio y cierre de sesión. Estoy usando Firebase para almacenar datos de usuarios y también para la autenticación.

Así que tengo el inicio de sesión en funcionamiento y autentica a los usuarios como debería y lo hago en el sentido de que no unauthenticates usuarios. Pero, ¿hay algo que deba hacer desde dentro de la aplicación para finalizar la sesión?

if (id == R.id.action_log_out) { ref.unauth(); //End user session startActivity(new Intent(MainActivity.this, LoginActivity.class)); //Go back to home page finish(); }

¿Funcionará como creo que debería? Obviamente, si alguien se desconecta, no debería poder presionar el botón de retroceso y volver mágicamente a la última página sin volver a iniciar sesión.



Eliminar tokens e ID de instancia

String authorizedEntity = PROJECT_ID; String scope = "GCM"; FirebaseInstanceID.getInstance(context).deleteToken(authorizedEntity,scope);

También puede eliminar el ID de instancia, incluidos todos los tokens asociados. La próxima vez que llame a getInstance () obtendrá una nueva ID de instancia:

FirebaseInstanceID.getInstance(context).deleteInstanceID(); String newIID = InstanceID.getInstance(context).getId();


Puede reemplazar finish() con finishAffinity();


Veo 2 opciones para el problema que tenemos con el botón Atrás después de cerrar sesión:

En su Actividad de inicio de sesión, debe ser su actividad de iniciador, anular el método onBackPressed y dejarlo vacío:

@Override public void onBackPressed() { // empty so nothing happens }

O / y puede agregar el LoginActivityIntent en su LogoutActivty si el usuario == null. De esta manera, siempre que un usuario no autenticado caiga en la actividad, se redirigirá a la Actividad de inicio de sesión instantáneamente, aunque esto parezca un poco extraño.

mAuth = FirebaseAuth.getInstance(); mAuthListener = new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { FirebaseUser user = firebaseAuth.getCurrentUser(); if (user != null) { // User is signed in Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid()); } else { // User is signed out Log.d(TAG,"onAuthStateChanged:signed_out"); startActivity(new Intent(LogoutActivity.this, LoginActivity.class)); } // ... } };

La primera opción es más fácil, pero supongo que si aplicas ambos en el lado de guardado ^^ Ahora estoy programando durante 2 semanas, así que corrígeme si me equivoco.


private void sendToLogin() { //funtion GoogleSignInClient mGoogleSignInClient ; GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)) .requestEmail() .build(); mGoogleSignInClient = GoogleSignIn.getClient(getBaseContext(), gso); mGoogleSignInClient.signOut().addOnCompleteListener(/*CURRENT CLASS */.this, new OnCompleteListener<Void>() { //signout Google @Override public void onComplete(@NonNull Task<Void> task) { FirebaseAuth.getInstance().signOut(); //signout firebase Intent setupIntent = new Intent(getBaseContext(), /*To ur activity calss*/); Toast.makeText(getBaseContext(), "Logged Out", Toast.LENGTH_LONG).show(); //if u want to show some text setupIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(setupIntent); finish(); } }); }

Este código está escrito para que funcione como una copia. Lea los COMENTARIOS en el código para personalizarlo según sus necesidades. Prefiero enviar usuarios para iniciar sesión.