1

観察可能な動作は次のとおりです。

  • オープン認証アクティビティ
  • Facebook SDK ボタンを使用してログインする
  • ログアウト(セッションを閉じる)
  • アプリを殺す
  • アプリを開く
  • 認証アクティビティを再度開く
  • アクティビティを開くだけで、Facebookは自動的にユーザーをログインさせます

いくつかのコード - auth アクティビティから:

    // 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

「永続的」とは正確に何を意味するのかわかりませんが、私の場合、次の 5 行のコードが完全に機能することがわかりました。

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

closeAndClearTokenInformation()メソッドは、Facebook セッションに関連する永続トークン キャッシュをクリアします。

于 2013-04-18T14:56:31.893 に答える