¿Cómo eliminar un usuario de Firebase de la aplicación para Android?

Estoy intentando codificar un método Delete User en mi aplicación Android, pero tengo algunos problemas cada vez que lo ejecuto. Este método se ejecutará cuando un usuario presione el botón Suprimir cuenta en una Actividad. Mis aplicaciones funcionan con FirebaseUI Auth.

Aquí está el método:

private void deleteAccount() { Log.d(TAG, "ingreso a deleteAccount"); FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(); final FirebaseUser currentUser = firebaseAuth.getCurrentUser(); currentUser.delete().addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { Log.d(TAG,"OK! Works fine!"); startActivity(new Intent(Main3WelcomeActivity.this, Main3Activity.class)); finish(); } } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Log.e(TAG,"Ocurrio un error durante la eliminación del usuario", e); } }); } 

1) Cuando ejecuto esa función, aparece un mensaje Smart Lock en la pantalla y el usuario vuelve a iniciar sesión. Aquí hay una captura de pantalla de este mensaje.

Mensaje Smartlock

2) En otras ocasiones, cuando el usuario está conectado por mucho tiempo, la función lanza una Excepción como esta:

 06-30 00:01:26.672 11152-11152/com.devpicon.android.firebasesamples E/Main3WelcomeActivity: Ocurrio un error durante la eliminación del usuario com.google.firebase.FirebaseException: An internal error has occured. [ CREDENTIAL_TOO_OLD_LOGIN_AGAIN ] at com.google.android.gms.internal.zzacq.zzbN(Unknown Source) at com.google.android.gms.internal.zzacn$zzg.zza(Unknown Source) at com.google.android.gms.internal.zzacy.zzbO(Unknown Source) at com.google.android.gms.internal.zzacy$zza.onFailure(Unknown Source) at com.google.android.gms.internal.zzact$zza.onTransact(Unknown Source) at android.os.Binder.execTransact(Binder.java:453) 

He leído que tengo que volver a autenticar al usuario, pero no estoy seguro de cómo hacerlo cuando estoy trabajando con Google Iniciar sesión.

Según la documentación de la base de datos de Firebase método delete() usuario puede delete() al usuario de la base de datos Firebase

Antes de quitar el usuario reAuthenticate por favor el usuario.

Código de muestra

  final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); // Get auth credentials from the user for re-authentication. The example below shows // email and password credentials but there are multiple possible providers, // such as GoogleAuthProvider or FacebookAuthProvider. AuthCredential credential = EmailAuthProvider .getCredential("[email protected]", "password1234"); // Prompt the user to re-provide their sign-in credentials user.reauthenticate(credential) .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { user.delete() .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { Log.d(TAG, "User account deleted."); } } }); } }); 

Para obtener más información: https://firebase.google.com/docs/auth/android/manage-users#re-authenticate_a_user

Si desea que el usuario re Autenticación con otro proveedor de Singin sólo tiene que cambiar el Provider de GoogleAuthProvider continuación es el código de ejemplo

 GoogleAuthProvider.getCredential(googleIdToken,null); 

Su devolución de llamada de delete ya maneja el caso de un error, ¿por qué agrega addOnFailureListener más tarde?

Intente eliminarlo de esta manera:

 private void deleteAccount() { Log.d(TAG, "ingreso a deleteAccount"); FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(); final FirebaseUser currentUser = firebaseAuth.getCurrentUser(); currentUser.delete().addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { Log.d(TAG,"OK! Works fine!"); startActivity(new Intent(Main3WelcomeActivity.this, Main3Activity.class)); finish(); } else { Log.w(TAG,"Something is wrong!"); } } }); } 

Utilice estos métodos: –

retirar()

Es equivalente al set(null) llamadas set(null) .

o

RemoveUser ()

 removeUser(credentials, [onComplete]) 

En primer lugar, debe guardar el token de autenticación o la contraseña en el momento en que el usuario inicie sesión. Si su aplicación no proporciona, como Inicio de sesión de Google, Inicio de sesión de Facebook u otros, sólo tiene que almacenar contraseña.

 //If there's any, delete all stored content from this user on Real Time Database. yourDatabaseReferenceNode.removeValue(); //Getting the user instance. final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); if (user != null) { //You need to get here the token you saved at logging-in time. String token = "userSavedToken"; //You need to get here the password you saved at logging-in time. String password = "userSavedPassword"; AuthCredential credential; //This means you didn't have the token because user used like Facebook Sign-in method. if (token == null) { credential = EmailAuthProvider.getCredential(user.getEmail(), password); } else { //Doesn't matter if it was Facebook Sign-in or others. It will always work using GoogleAuthProvider for whatever the provider. credential = GoogleAuthProvider.getCredential(token, null); } //We have to reauthenticate user because we don't know how long //it was the sign-in. Calling reauthenticate, will update the //user login and prevent FirebaseException (CREDENTIAL_TOO_OLD_LOGIN_AGAIN) on user.delete() user.reauthenticate(credential) .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { //Calling delete to remove the user and wait for a result. user.delete().addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { //Ok, user remove } else { //Handle the exception task.getException(); } } }); } }); } 
  • ¿Cómo usar firebase con ViewPager y FragmentPagerAdapter?
  • FirebaseRecyclerAdapter y multiplicar tipos de elementos en android
  • Cómo implementar un SetOnItemClickListener FirebaseRecyclerViewAdapter
  • FirebaseUI y Firebase, ¿cuál es la diferencia?
  • Cómo excluir el elemento de un FirebaseRecyclerAdapter
  • Android Firebase chat RecyclerView desplazamiento automático hacia abajo cuando se agrega un nuevo elemento
  • Cómo hacer la vista de mensaje roscado con enviar y recibir mensajes en dos lados con la vista de reciclador
  • Cargando más elementos en el usuario desplazarse con FirebaseIndexRecyclerAdapter
  • Firebase RecyclerView - Desplácese sobre la animación cuando se añade un elemento nuevo
  • Firebase UI RecyclerView onClick
  • FirebaseUI Auth - Error de inicio de sesión de Facebook: respuesta de debug_token fallida de Facebook
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.