wywołanie zwrotne logowania na Facebooku uruchamia się wielokrotnie

Moja aplikacja maDzielić przycisk, aby udostępnić historię na osi czasu użytkowników. To, co robię, to kliknięcie przez użytkownika przycisku Share, jeśli sesja użytkownika nie jest obecna w aplikacjach, aby zalogować użytkownika na Facebooku. Gdy użytkownik to zrobi, historia musi zostać opublikowana. Oto mój kod.

onCreate Method

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

A pozostały kod to -

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

Kod do publikowaniaStory ()

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

    if (session != null) {

        // Check for publish permissions
        List<String> 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");
    }

}

Kod publikuje historię na osi czasu użytkowników. Ale publikuje wiele razy. To znaczy,statusCallbackwielokrotnie strzelano. Próbowałem ustawić flagi, aby sprawdzić status postu. Ale nadal piszę kilka razy.

Jakieś pomysły, co jest nie tak z tym kodem? Pomoc jest wysoko ceniona.

PS: Nie potrzebuję osobno przycisku logowania. Chcę, aby użytkownik nacisnął przycisk Share, jeśli jest zalogowany, musi opublikować artykuł, a następnie zalogować użytkownika, a następnie bezpośrednio opublikować historię.

questionAnswers(2)

yourAnswerToTheQuestion