Unlink de varios proveedores

29 views
Skip to first unread message

Donis

unread,
Jun 14, 2016, 11:48:15 PM6/14/16
to desarrolladores-android
Hola estoy haciendo un registro con varios proveedores (password y Facebook). Cuando los conecto no hay problema pero cuando desconecto uno de ellos, en la consola de Firebase se modifica bien pero en mi aplicacion todavía está conectado :

if (mAuth.getCurrentUser().getProviderData().size()<3) {  // Si solo hay 2 (Firebase y otro) no hemos hecho link
FirebaseAuth.getInstance().signOut();
numProvs = 0;
}
else {
mAuth.getCurrentUser().unlink(proveedor).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Log.d(TAG, "unlink: " + proveedor);
numProvs--;
if (!task.isSuccessful())
showErrorDialog(task.getException().getMessage());
mAuthProgressDialog.hide();
}
});
}
}

Ejemplo:
Si estoy conectado con Password y con Facebook (bueno y con el usuario de Firebase que siempre está) cuando 
me quiero desconectar de uno de los dos, entro en el else ( si tuviera dos proveedores el por defecto de Firebase y otro
pues entraria por el if y desconectaria el usuario porque sería el ultimo proveedor) y allí hago el unlink. El unlink 
funciona bien en la consola Auth de Firebase pero si dentro del onComplete compruebo los proveedores es como sinó me
lo hubiera deslogueado(cuando en la consola ya no está dicho proveedor). 

Martin

unread,
Jun 16, 2016, 8:33:27 AM6/16/16
to desarrollad...@googlegroups.com
Por las dudas, te recomiendo mirar en los códigos de ejemplo: https://github.com/firebase/quickstart-android/blob/master/auth
los ejemplos de login/logout para cada proveedor y para el enviar el signout, fijate de usar:

mAuth.signOut()

para ver si tuvo éxito eso, en el listener AuthStateListener y dentro de onAuthStateChanged comprueba que FirebaseAuth.getCurrentUser() tenga el valor null, ej:
Si tiene el valor de null esta deslogueado, sino tiene un objeto FirebaseUser


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");
             }
             
             updateUI(user);
            
    }
};

y además, ¿queres desloguear solo de a un proveedor o desloguear todos a la vez?

hay que subrayar que el API tiene 2 cosas que pueden confundir un poco, una el unlink de la credencial del proveedor (esto seria desvincular la cuenta, pero no desloguear) y otra el SignOut (esta seria el deslogueo), si alguien puede arrojar mas luz sobre este punto mejor

Gabriel Pozo

unread,
Jun 16, 2016, 6:13:09 PM6/16/16
to desarrolladores-android
Esa es la documentación de donde sacaste el código, por lo menos eso imagino.
Realmente no eh utilizado Firebase, ahora quisiera ver como es que comprobás que no de "deslogueo" el usuario al que le diste el unlink?
Otra consulta, vos lo que deseas hacer, es que siempre este logueado con un solo usuario? O cual es el objetivo de esto?


El jue., 16 jun. 2016 a las 9:33, Martin (<emcsolu...@gmail.com>) escribió:
Por las dudas, te recomiendo mirar en los codigos de ejemplo: https://github.com/firebase/quickstart-android/blob/master/auth

los ejemplos de login/logout para cada proveedor y para el enviar el signout, fijate de usar:

mAuth.signOut()

para ver si tuvo éxito eso, en el listener AuthStateListener y dentro de onAuthStateChanged comprueba que FirebaseAuth.getCurrentUser() tenga el valor null, ej:
Si titene null esta deslogueado sino tiene un objeto FirebaseUser



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");
             }
             
             updateUI(user);
            
    }
};

y además, queres desloguear solo de a un proveedor o desloguear todos a la vez?

--
Para participar es necesario que leas detenidamente las normas del grupo: https://goo.gl/xeTRQm
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-a...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/desarrolladores-android.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/desarrolladores-android/3c41364a-8bff-4b14-8f4d-df1b3c8923c8%40googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Donis

unread,
Jun 16, 2016, 6:28:02 PM6/16/16
to desarrolladores-android
Hola gracias contestar, la verdad es que este grupo me esta salvando la vida, muchas gracias.
En cuanto a los ejemplos oficiales ya los he visto pero en ninguno tratan que un usuario pueda estar registrado con mas de un proveedor a la vez (G+,Facebook...) y entonces no utilizan en unlink.

En cuando al "deslogueo" yo lo hago así:

Si se desconecta de un proveedor pues desconecto y entonces si que hago lo que dices  

"mAuth.signOut()" o  "FirebaseAuth.getInstance().signOut()"  que es lo mismo

Pero si se ha registrado con dos proveedores (por ejemplo G+ y Facebook), cuando se desconecta de uno ese le hago un unlink pero no deslogueo todo el usuario ya que todavia sigue registrado con el otro. Si despues si que se desconectara del que le queda entonces si que haria un signOut.  

El problema viene en que cuando un unlink (como dije) se borra desde la web ( en la consola de Firebase , en el apartado Auth, si que aparece como que ese proveedor ya no esta) pero en la app no, es decir, despues de entrar en el unlink, Firebase detecta que se han modificado las credenciales y entra (como has dicho tu) en "onAuthStateChanged" y dentro de aquí, cuando le pide el usuario (FireBaseuser) este todavía tiene los proveedores, no detecta que ya se ha eliminado un proveedor 

Donis

unread,
Jun 16, 2016, 6:33:26 PM6/16/16
to desarrolladores-android
Hola Gabriel , el proposito de que se pueda registrar con mas de un proveedor es que si por ejemplo quiere publicar algo en Facebook y tambien quiere publicar algo en Google+, si se desconecta de Facebook no hace falta desconectarlo de Google+ esa es la filosofia que creo yo que utilizan los de Firebase con el unlink.


El miércoles, 15 de junio de 2016, 5:48:15 (UTC+2), Donis escribió:
Message has been deleted

Gabriel Pozo

unread,
Jun 17, 2016, 9:21:36 AM6/17/16
to desarrolladores-android

Ok, es muy raro eso jejeje
Si te funciona, mejor así, justo me iba a poner a buscar algo sobre el tema


El vie., 17 jun. 2016 0:16, Donis <javierm...@gmail.com> escribió:
Ya me funciona bien, algo han debido hacer en Firebase porque yo no he tocado nada


El miércoles, 15 de junio de 2016, 5:48:15 (UTC+2), Donis escribió:
--
Para participar es necesario que leas detenidamente las normas del grupo: https://goo.gl/xeTRQm
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-a...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/desarrolladores-android.

Eduardo Martin Cabrera

unread,
Jun 17, 2016, 3:40:27 PM6/17/16
to desarrollad...@googlegroups.com
Che yo estoy asustado si Gabriel no conoce de Firebase, ¿te pasaste a Windows Phone? ;)

Ahora en serio, pienso que estaria bueno recolectar algunos ejemplos y links por lo siguiente: la doc de GCM, recomienda usar Firebase; Firebase ha sido actualizado y veo en la red código tanto para la vieja versión como para la nueva versión, pienso que de firebase al menos vamos a necesitar las push notifications como mínimo, y por otro lado ya salio API 24, con algunas cosas "raras" que estaria bueno investigar

Gabriel Pozo

unread,
Jun 17, 2016, 5:22:34 PM6/17/16
to desarrollad...@googlegroups.com

Jajaja si estaría bueno recolectar info sobre el tema

Si es verdad, si desarrollas para Android debes conocer y estudiar sobre Firebase. El tema es que hace un tiempo largo, que no hago cosas para Android 😃😃
Y cuando tenía proyectos para Android, Firebase estaba muy verde, así que no me vendría mal un update de conocimiento sobre el tema 😉


Donis

unread,
Jun 18, 2016, 12:12:33 PM6/18/16
to desarrolladores-android
Ya me vuelve a hacer lo mismo creo que será mas un tema del Android Studio que 
del propio Firebase. 

El miércoles, 15 de junio de 2016, 5:48:15 (UTC+2), Donis escribió:
Reply all
Reply to author
Forward
0 new messages