如何在不使用 Facebook 登录/注销按钮的情况下以编程方式从 Facebook SDK 3.0 注销? [英] How to programmatically log out from Facebook SDK 3.0 without using Facebook login/logout button?

查看:30
本文介绍了如何在不使用 Facebook 登录/注销按钮的情况下以编程方式从 Facebook SDK 3.0 注销?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

标题说明了一切.我正在使用自定义按钮来获取用户的 Facebook 信息(用于注册"目的).然而,我不希望应用程序记住上次注册的用户,也不希望当前通过 Facebook 原生应用程序登录的用户.我希望每次都弹出 Facebook 登录活动.这就是为什么我想以编程方式注销所有以前的用户.

The title says it all. I'm using a custom button to fetch the user's facebook information (for "sign up" purposes). Yet, I don't want the app to remember the last registered user, neither the currently logged in person via the Facebook native app. I want the Facebook login activity to pop up each time. That is why I want to log out any previous users programmatically.

我该怎么做?这是我登录的方式:

How can I do that? This is how I do the login:

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

理想情况下,我会在此方法的开头调用以注销所有以前的用户.

Ideally, I would make a call at the beginning of this method to log out any previous users.

推荐答案

最新 SDK 的更新:

现在@zeuter 的回答对于 Facebook SDK v4.7+ 是正确的:

Now @zeuter's answer is correct for Facebook SDK v4.7+:

LoginManager.getInstance().logOut();

原答案:

请不要使用 SessionTracker.它是一个内部(包私有)类,不应作为公共 API 的一部分使用.因此,它的 API 可能随时更改,而没有任何向后兼容性保证.您应该能够删除代码中的所有 SessionTracker 实例,而只使用活动会话.

Please do not use SessionTracker. It is an internal (package private) class, and is not meant to be consumed as part of the public API. As such, its API may change at any time without any backwards compatibility guarantees. You should be able to get rid of all instances of SessionTracker in your code, and just use the active session instead.

要回答您的问题,如果您不想保留任何会话数据,只需调用 closeAndClearTokenInformation 当您的应用关闭时.

To answer your question, if you don't want to keep any session data, simply call closeAndClearTokenInformation when your app closes.

这篇关于如何在不使用 Facebook 登录/注销按钮的情况下以编程方式从 Facebook SDK 3.0 注销?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆