80 votes

Comment se déconnecter de façon programmatique de facebook sdk 3.0 sans utiliser le bouton de connexion/ déconnexion de facebook ?

Le titre dit tout. J'utilise un bouton personnalisé pour récupérer les informations Facebook de l'utilisateur (à des fins d'"inscription"). Cependant, je ne veux pas que l'application se souvienne du dernier utilisateur enregistré, ni de la personne actuellement connectée via l'application native de Facebook. Je veux que l'activité de connexion Facebook apparaisse à chaque fois. C'est pourquoi je veux déconnecter tous les utilisateurs précédents de manière programmatique.

Comment puis-je le faire ? C'est ainsi que je procède à la connexion :

private void signInWithFacebook() {

    SessionTracker sessionTracker = new SessionTracker(getBaseContext(), new StatusCallback() 
    {
        @Override
        public void call(Session session, SessionState state, Exception exception) { 
        }
    }, null, false);

    String applicationId = Utility.getMetadataApplicationId(getBaseContext());
    mCurrentSession = sessionTracker.getSession();

    if (mCurrentSession == null || mCurrentSession.getState().isClosed()) {
        sessionTracker.setSession(null);
        Session session = new Session.Builder(getBaseContext()).setApplicationId(applicationId).build();
        Session.setActiveSession(session);
        mCurrentSession = session;
    }

    if (!mCurrentSession.isOpened()) {
        Session.OpenRequest openRequest = null;
        openRequest = new Session.OpenRequest(RegisterActivity.this);

        if (openRequest != null) {
            openRequest.setPermissions(null);
            openRequest.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);

            mCurrentSession.openForRead(openRequest);
        }
    }else {
        Request.executeMeRequestAsync(mCurrentSession, new Request.GraphUserCallback() {
              @Override
              public void onCompleted(GraphUser user, Response response) {
                  fillProfileWithFacebook( user );
              }
            });
    }
}

L'idéal serait de faire un appel au début de cette méthode pour déconnecter tous les utilisateurs précédents.

160voto

Ming Li Points 8486

N'utilisez pas SessionTracker. Il s'agit d'une classe interne (package private), qui n'est pas destinée à être utilisée dans le cadre de l'API publique. En tant que telle, son API peut changer à tout moment sans aucune garantie de rétrocompatibilité. Vous devriez pouvoir vous débarrasser de toutes les instances de SessionTracker dans votre code et utiliser simplement la session active à la place.

Pour répondre à votre question, si vous ne voulez pas conserver de données de session, il suffit d'appeler closeAndClearTokenInformation lorsque votre application se ferme.

87voto

Rikin Prajapati Points 571

Cette méthode vous aidera à vous déconnecter de Facebook de manière programmatique sous Android.

/**
 * Logout From 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

    }

}

27voto

jpotter6 Points 660

Voici le snippet qui m'a permis de me déconnecter programmatiquement de facebook. Faites-moi savoir si vous voyez quelque chose que je devrais améliorer.

private void logout(){
    // clear any user information
    mApp.clearUserPrefs();
    // find the active session which can only be facebook in my app
    Session session = Session.getActiveSession();
    // run the closeAndClearTokenInformation which does the following
    // DOCS : Closes the local in-memory Session object and clears any persistent 
    // cache related to the Session.
    session.closeAndClearTokenInformation();
    // return the user to the login screen
    startActivity(new Intent(getApplicationContext(), LoginActivity.class));
    // make sure the user can not access the page after he/she is logged out
    // clear the activity stack
    finish();
}

0voto

selva_pollachi Points 1452
private Session.StatusCallback statusCallback = new SessionStatusCallback();

logout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Session.openActiveSession(this, true, statusCallback);  
}
});

private class SessionStatusCallback implements Session.StatusCallback {
@Override
public void call(Session session, SessionState state,
Exception exception) {
session.closeAndClearTokenInformation();    
}
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X