web-dev-qa-db-fra.com

Déconnexion de google et facebook dans l'application Android

J'ai intégré google et facebook en utilisant leurs méthodes respectives. Mais après la signature réussie, je souhaite ouvrir une activité différente et de la même manière, l'utilisateur peut accéder à différentes activités. J'ai utilisé la barre d'action où je donne la possibilité de déconnecter l'un des comptes auxquels l'utilisateur s'est connecté. Comment puis-je déconnecter l'utilisateur lorsque je suis dans une activité différente de l'activité principale. Je reçois une exception et je ne suis pas en mesure de passer une référence apiclient (pour google) et une référence de session (pour facebook) à une autre activité. S'il vous plaît aider. Merci d'avance.

9
Jarvis

Déconnectez-vous de google:

Ajoutez simplement ceci sur votre nouvelle activité, où vous voulez que votre bouton de déconnexion pour google + soit présent:

@Override
protected void onStart() {
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .build();
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
            .build();
    mGoogleApiClient.connect();
    super.onStart();
}

et ensuite vous pouvez définir le bouton setOnClickListener sur:

signout.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
      Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
              new ResultCallback<Status>() {
                  @Override
                  public void onResult(Status status) {
                      // ...
                      Toast.makeText(getApplicationContext(),"Logged Out",Toast.LENGTH_SHORT).show();
                      Intent i=new Intent(getApplicationContext(),MainActivity.class);
                      startActivity(i);
                  }
              });
  }
});
13
sommesh

Déconnectez-vous de facebook:

public static void callFacebookLogout(Context context) {
Session session = Session.getActiveSession();
if (session != null) {

    if (!session.isClosed()) {
        session.closeAndClearTokenInformation();
        //clear your preferences if saved
    }
} else  {

    session = new Session(context);
    Session.setActiveSession(session);

    session.closeAndClearTokenInformation();
        //clear your preferences if saved

 }

}

Déconnectez-vous de google:

@Override
public void onClick(View view) {
if (view.getId() == R.id.sign_out_button) {
if (mGoogleApiClient.isConnected()) {
  Plus.AccountApi.clearDefaultAccount(mGoogleApiClient);
  mGoogleApiClient.disconnect();
  mGoogleApiClient.connect();
  }
 }
}

Docs du guide

3
Miki Franko

ajoutez simplement à votre nouvelle activité ceci: 

 @Override
        protected void onStart() {
            mGoogleApiClient.connect();
            super.onStart();
        }

et alors 

@Override
    public void onClick(View v)  {
            switch (v.getId()) {
                case R.id.sign_out_button2:

                        Plus.AccountApi.clearDefaultAccount(mGoogleApiClient);
                        mGoogleApiClient.disconnect();
                        mGoogleApiClient.connect();
3
Andrea

Mis à jour le 7 nov. 2017 Dernier code pour les événements de connexion et de déconnexion

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestEmail()
                    .build();
    GoogleSignInClient mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

Google Logout

 mGoogleSignInClient.signOut()
                .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        // [START_EXCLUDE]
                        updateUI(null);
                        // [END_EXCLUDE]
                    }
                });

Google RevokeAccess

 mGoogleSignInClient.revokeAccess()
                .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        // [START_EXCLUDE]
                        updateUI(null);
                        // [END_EXCLUDE]
                    }
                });

Référez-vous à Google Code Ici

1
Prashant Arvind

Tout d'abord pour la déconnexion Facebook:

LoginManager.getInstance().logOut();

Si vous essayez de vous déconnecter d'une autre activité ou d'un autre fragment, cela vous donnera une erreur telle que Facebook sdk non initialisé. Ensuite, vous devez d’abord initialiser Facebook sdk comme ceci:

FacebookSdk.sdkInitialize(your context here);

puis déconnectez-vous du gestionnaire.

Secondaire pour la déconnexion google:

vous devez d’abord vérifier que le client google est connecté ou non et, s’il est connecté, appeler le code de déconnexion:

if (mGoogleApiClient.isConnected())
   Auth.GoogleSignInApi.signOut(mGoogleApiClient);

ici mGoogleApiClient est un objet de GoogleApiClient.

1
Hani Ramani

Pour compte google 

Auth.GoogleSignInApi.signOut(mGoogleApiClient);

et pour compte facebook

LoginManager.getInstance().logOut();
1
tej shah

se déconnecter de facebook est assez facile

il suffit d'ajouter le code suivant

LoginManager.getInstance().logOut();

vous pouvez ensuite rediriger l'utilisateur vers l'activité de connexion en ajoutant le code suivant

LoginManager.getInstance().logOut();
Intent intent = new Intent(CurrentActivity.this, LoginActivity.class);
startActivity(intent);
finish();

donc votre code final pour logoutFromFacebook serait

public void logoutFromFacebook(){
    LoginManager.getInstance().logOut();
    Intent intent = new Intent(CurrentActivity.this, LoginActivity.class);
    startActivity(intent);
    finish();
}

Maintenant, appelez simplement cette méthode lors de votre événement de bouton de déconnexion.

1
kulbhushan jain
public class LogOutActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener {
        GoogleApiClient mGoogleApiClient;
        Button btnLogout;

        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            btnLogut = (Button) findViewBy(R.id.btnLogout);

            GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestEmail()
                    .build();
            mGoogleApiClient = new GoogleApiClient.Builder(this)
                    .enableAutoManage(this, this)
                    .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                    .build();


            btnLogout.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(new ResultCallback<Status>() {
                        @Override
                        public void onResult(@NonNull Status status) {
                        }

                        Intent intent = new Intent(mContext, LoginActivity.class);
                    });
                }
            });
        }

        @Override
        public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

        }
    }
0
Mohsinali

Juste cela aussi dans une autre activité différente de celle de connexion où vous devriez avoir le bouton de connexion.

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(fromActivity.getString(R.string.default_web_client_id))
            .requestEmail()
            .requestProfile()
            .build();
    // Build a GoogleSignInClient with the options specified by gso.
    GoogleSignInClient mGoogleSignInClient = GoogleSignIn.getClient(fromActivity, gso);
    mGoogleSignInClient.signOut();
0
Emanuele Fricano

Pour vous déconnecter de Facebook.

public void logoutFromFacebook() {
        Session session = Session.getActiveSession();
        session.closeAndClearTokenInformation();
        // Clear Preferences and other data and go back to login activty
    }

Pour vous déconnecter de Google+. Gardez à l'esprit que la déconnexion de Google+ est un peu plus complexe que celle de Facebook. Vous devrez gérer un booléen pour garder une trace des événements lorsque vous cliquez sur la déconnexion (comme pour la connexion).

public void logoutFromGooglePlus() {
        mGooglePlusLogoutClicked = true;  // Keep track when you click logout
        if (mGoogleApiClient.isConnected()) {
            Plus.AccountApi.clearDefaultAccount(mGoogleApiClient);
            revokeAccess();
        } else {
            mGoogleApiClient.connect();   // It can send user to onConnected(), call logout again from there
        }
    }

// revoke access (if needed)
protected void revokeAccess() {

        Plus.AccountApi.revokeAccessAndDisconnect(mGoogleApiClient)
                .setResultCallback(new ResultCallback<Status>() {
                    @Override
                    public void onResult(Status status) {
                        mGoogleApiClient.disconnect();
                        mGoogleApiClient.connect();
                        // Clear data and go to login activity
                    }
                });
    }

Pour répondre à la question dans le commentaire: GoogleApiClient peut être instancié plusieurs fois dans une application et prend toujours la même instance que celle initialisée. Alors, ne vous inquiétez pas de la façon de "passer" GoogleApiClient entre les activités. C'est un client léger conçu pour être initialisé en tant que nouvelle instance dans chaque activité. Créez simplement une nouvelle GoogleAPiClient, appelez .connect() et commencez à travailler. Cependant, vous devrez implémenter les interfaces nécessaires, mais vous pouvez laisser les méthodes vides si vous ne souhaitez pas y travailler.

En ce qui concerne mLogoutClicked boolean, vous pouvez avoir votre propre implémentation à votre guise. En gros, c'est juste un moyen de dire à la méthode onConnected() que vous êtes venu pour une déconnexion. (Regardez le code, nous appelons aussi .connect() lors de la déconnexion. Cela pourrait donc aller dans onConnected() et entrer en conflit avec votre code de connexion). Vous feriez quelque chose comme ceci sur votre onconnected()

public void onConnected(Bundle connectionHint) {

        if (mGooglePlusLogoutClicked) {
            logoutFromGooglePlus();
            mGooglePlusLogoutClicked = false;
        }
    }

Pour vous conseiller sur le déroulement de votre implémentation, demandez à une classe de base d'effectuer toutes les initialisations GoogleApiClient et de laisser l'activité Login et les autres activités les étendre. Donc, il va implicitement gérer le problème d'initialisation d'un client dans chaque activité. Implémentez simplement le code onConnected(), onConnectionFailed() etc commun dans l'activité de base et laissez l'activité de connexion remplacer celle-ci pour implémenter la logique de connexion. (et identique pour l'activité de déconnexion. Il remplacera ces informations et gérera le code de déconnexion)

0
VipulKumar