Facebook Логин Callback срабатывает несколько раз

Мое приложение имеетПоделиться кнопка, чтобы поделиться историей на временной шкале пользователей. Что я'Я делаю так, пользователь нажимает на кнопку «Поделиться», если пользовательский сеанс отсутствует, приложение заставляет пользователя войти в систему через Facebook. Когда пользователь делает это, история должна быть опубликована напрямую. Вот'мой код

Метод onCreate

    isShared = false;
    uiHelper = new UiLifecycleHelper(this, statusCallback);
    uiHelper.onCreate(savedInstanceState);
    Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);
    Session session = Session.getActiveSession();
    if (session == null) {

        if (savedInstanceState != null) {
            session = Session.restoreSession(this, null, statusCallback,
                    savedInstanceState);
        }
        if (session == null) {
            session = new Session(this);
        }
        Session.setActiveSession(session);
        if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
            session.openForRead(new Session.OpenRequest(this)
                    .setCallback(statusCallback));
        }
    }       

    if (savedInstanceState != null) {
        pendingPublishReauthorization = savedInstanceState.getBoolean(
                PENDING_PUBLISH_KEY, false);
    }

    shareBtn.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            doPostStory();                              
        }
    });

И оставшийся код -

    private void doPostStory() {
    Session session = Session.getActiveSession();
    if (!session.isOpened() && !session.isClosed()) {
        session.openForRead(new Session.OpenRequest(this)
                .setCallback(statusCallback));
    } else {
        isShared = true;
        Session.openActiveSession(this, true, statusCallback);
        publishStory();         
    }
}

private class SessionStatusCallback implements Session.StatusCallback {
    @Override
    public void call(Session session, SessionState state,
            Exception exception) {
        if(!isShared){
            updateView();
            isShared = true;
        }
    }
}

private void updateView() {
    Session session = Session.getActiveSession();
    if (session.isOpened()) {
        if(!isShared){
            publishStory();
        }
        Log.i("Session State callback", "Logged in");
    } else {
        Log.i("Session State Callback", "Logged Out");                      
    }
}   

@Override
public void onStart() {
    super.onStart();
    Session.getActiveSession().addCallback(statusCallback);
}

@Override
public void onStop() {
    super.onStop();
    Session.getActiveSession().removeCallback(statusCallback);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Session.getActiveSession().onActivityResult(this, requestCode,
            resultCode, data);
    uiHelper.onActivityResult(requestCode, resultCode, data);
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    Session session = Session.getActiveSession();
    Session.saveSession(session, outState);
    outState.putBoolean(PENDING_PUBLISH_KEY, pendingPublishReauthorization);
    uiHelper.onSaveInstanceState(outState);
}

@Override
public void onPause() {
    super.onPause();
    uiHelper.onPause();
}

@Override
public void onResume() {
    super.onResume();
    uiHelper.onResume();
}

Код для publishStory ()

    private void publishStory() {
    Session session = Session.getActiveSession();

    if (session != null) {

        // Check for publish permissions
        List permissions = session.getPermissions();
        if (!isSubsetOf(PERMISSIONS, permissions)) {
            pendingPublishReauthorization = true;
            Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(
                    this, PERMISSIONS);
            session.requestNewPublishPermissions(newPermissionsRequest);
            return;
        }

        Bundle postParams = new Bundle();
        postParams.putString("name", "Some");
        postParams.putString("caption",updateTitle);
        postParams.putString("description",updateText);
        postParams.putString("link","http://somedomain.com");
        postParams.putString("picture","someurl");

        Request.Callback callback = new Request.Callback() {
            public void onCompleted(Response response) {
                JSONObject graphResponse = response.getGraphObject()
                        .getInnerJSONObject();
                String postId = null;
                try {
                    postId = graphResponse.getString("id");
                } catch (JSONException e) {
                    Log.i("asd", "JSON error " + e.getMessage());
                }
                FacebookRequestError error = response.getError();
                if (error != null) {
                    Toast.makeText(UpdateDetails.this,
                            error.getErrorMessage(), Toast.LENGTH_SHORT)
                            .show();
                } else {
                    Toast.makeText(UpdateDetails.this, postId,
                            Toast.LENGTH_LONG).show();
                }
            }
        };

        Request request = new Request(session, "me/feed", postParams,
                HttpMethod.POST, callback);

        RequestAsyncTask task = new RequestAsyncTask(request);
        task.execute();
    } else {
        Log.i("Session Sate", "close");
    }

}

Код публикует историю на временной шкале пользователей. Но он публикуется несколько раз. Это означает,statusCallbackбыть уволенным несколько раз. Я попытался установить флаги, чтобы проверить статус поста. Но все же это пост несколько раз.

Любые идеи, чтоне так с этим кодом? Помощь высоко ценится.

PS: я неКнопка входа не нужна отдельно. Я хочу, чтобы пользователь нажимал на кнопку «Поделиться», если вошел в систему, нужно опубликовать статью, а затем войти в систему пользователя и затем непосредственно опубликовать статью.

Ответы на вопрос(2)

Ваш ответ на вопрос