1

可观察到的行为如下:

  • 打开身份验证活动
  • 使用 facebook sdk 按钮登录
  • 注销(关闭会话)
  • 杀死应用程序
  • 打开应用
  • 再次打开身份验证活动
  • Facebook 自动登录用户,只需打开活动

一些代码 - 来自身份验证活动:

    // Facebook callback
    private Session.StatusCallback callback = new Session.StatusCallback() {
        @Override
        public void call(Session session, SessionState state, Exception exception) {
            onSessionStateChange(session, state, exception);
        }
    };
    // Facebook Helper
    private UiLifecycleHelper uiHelper;
    ...
    protected void onCreate(Bundle savedInstanceState) {
    ...
        fbAuthBtn = (LoginButton) findViewById(R.id.fbAuthButton);
        fbAuthBtn.setApplicationId(getString(R.string.fb_app_id));

        uiHelper = new UiLifecycleHelper(this, callback);
        uiHelper.onCreate(savedInstanceState);
    ...
    }
    ...
    /**
     * Facebook session state changed
    */
    public void onSessionStateChange(Session session, SessionState state, Exception exception) {
      if (state.isOpened()) {
        // Logged In
        if (User.getInstance().authenticationType != UserAuthenticationMethod.FACEBOOK) {
            showProgress();

            FacebookAuthenticator fbAuth = new FacebookAuthenticator(this, handlerFacebook);
            fbAuth.authenticate();
            }
       } else if (state.isClosed()) {
        // Logged Out
        User.getInstance().logout();
       }
    }

我实现注销如下:

public void logout() {
    ...
    // Logout Facebook
    Session fbSession = Session.getActiveSession();
    if (fbSession != null) {
        fbSession.close();
    }
    ...
}

那么,如何使我的注销永久化?

4

2 回答 2

1

我不知道“永久”到底是什么意思,但就我而言,我发现这五行代码运行良好:

Session session = Session.getActiveSession();
if (session != null){
    session.closeAndClearTokenInformation();
    Session.setActiveSession(null)
}

closeAndClearTokenInformation ()方法清除与 Facebook 会话相关的任何持久令牌缓存。

于 2013-04-18T14:56:31.893 回答
0

知道了!因为我正在登录,在与注销不同的活动中,如果我从未打开我登录的活动,则当我注销时,facebook Session 为空。这意味着注销代码没有运行(因为 fbSession ==null),因此会话保持打开状态。

解决方案是在您需要恢复会话状态时使用 UiLifecycleHelper。

于 2013-04-18T16:04:03.763 回答