[android] ¿Cómo cerrar programáticamente desde Facebook SDK 3.0 sin usar el botón de inicio / cierre de sesión de Facebook?



Answers

Este método te ayudará a desconectarte de Facebook programáticamente en 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

    }

}
Question

El título lo dice todo. Estoy usando un botón personalizado para buscar la información de Facebook del usuario (para fines de "registro"). Sin embargo, no quiero que la aplicación recuerde al último usuario registrado ni a la persona que inició sesión actualmente a través de la aplicación nativa de Facebook. Quiero que la actividad de inicio de sesión de Facebook aparezca cada vez. Es por eso que quiero cerrar la sesión de cualquier usuario anterior mediante programación.

¿Cómo puedo hacer eso? Así es como hago el inicio de sesión:

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 );
              }
            });
    }
}

Idealmente, haría una llamada al inicio de este método para cerrar la sesión de cualquier usuario anterior.




Aquí hay un fragmento que me permitió desconectarme programáticamente de Facebook. Avíseme si ve algo que necesite mejorar.

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



La clase de sesión se ha eliminado en SDK 4.0. La mapeo de inicio de sesión se realiza a través de la clase LoginManager . Asi que:

mLoginManager = LoginManager.getInstance();
mLoginManager.logOut();

Como dice la referencia Actualización a SDK 4.0 :

Sesión eliminada : las clases AccessToken, LoginManager y CallbackManager reemplazan y reemplazan la funcionalidad en la clase Session.




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



Related