Lorsque j'appelle mFirebaseAuth.signOut()
ou mFirebaseUser.delete()
, mon FirebaseAuth.AuthStateListener()
fonctionne correctement et renvoie null
en tant qu'instance FirebaseUser
dans onAuthStateChanged
, j'actualise l'interface utilisateur et affiche le bouton "Connexion avec Google".
Mais lorsque je veux me reconnecter, je ne vois pas la fenêtre contextuelle avec les utilisateurs (j'ai 2 utilisateurs sur mon appareil, qui est attachée à l'image). L'application affiche cette fenêtre contextuelle uniquement lors de la première connexion, après quoi elle utilise le même utilisateur. Si j'efface les données de l'application sur l'écran des paramètres, je pourrai voir à nouveau cette fenêtre contextuelle.
Ma question est de savoir comment afficher cette fenêtre contextuelle après chaque déconnexion.
Je lance ce code lorsque vous appuyez sur le bouton Sign In:
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, FirebaseActivity.REQUEST_SIGN_IN);
Dans onActivityResult()
, je reçois une instance de GoogleSignInResult
afin que tout ce dont j'ai besoin se produise après l'appel de startActivityForResult()
.
Dans l'exemple de code Firebase Auth Quickstart , la déconnexion du fournisseur Google inclut ces étapes. Appelez-vous GoogleSignInClient.signOut()
lorsque vous vous déconnectez?
private void signOut() {
// Firebase sign out
mAuth.signOut();
// Google sign out
mGoogleSignInClient.signOut().addOnCompleteListener(this,
new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
updateUI(null);
}
});
}
Une autre option consiste à utiliser la bibliothèque FirebaseUI . Il simplifie les opérations sign in et signout dans le sens où il fera le gros du travail pour vous.
Kotlin
AuthUI.getInstance().signOut(this).addOnCompleteListener {
// do something here
}
Java
AuthUI.getInstance()
.signOut(ActivityMainOld.this)
.addOnCompleteListener(new OnCompleteListener<Void>(){
@Override
public void onComplete(@NonNull Task<Void> task) {
// do something here
}
});
J'espère que cela t'aides
Pour tous ceux qui souhaitent obtenir ce résultat (comme pour récupérer les options du compte Google) sur une activité différente.
public static void signOut() {
// Firebase sign out
mAuth.signOut();
// Google sign out
Auth.GoogleSignInApi.signOut(mGoogleApiClient);
}
Ajoutez ceci sur la page de connexion et, avant de passer à l'activité suivante, appelez simplement SignOut()
.
// everything ok...
signOut();
startActivity(new Intent(SignIn.this,NextOne.class));
et ensuite, dans votre autre classe, vous pouvez appeler
FirebaseAuth.getInstance().signOut();
startActivity(new Intent(NextClass.this, SignIn.class));
C'est facile et ça va marcher. À votre santé!
Vous pouvez également définir quelque chose comme ceci:
private void signOut() {
mAuth.signOut();
mGoogleSignInClient.signOut().addOnCompleteListener(this,
new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Intent intent = new Intent(YourActivity.this, NextActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
});
}
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();
}
});
}
ce code est écrit pour fonctionner en tant que copier passé il suffit de lireCOMMENTAIRESdans le code pour le personnaliser à vos besoins, je préfère envoyer l’utilisateur à la connexion
J'ai fait mGoogleSignInClient.signOut()
Cela fonctionne comme prévu.