1

openForPublish を呼び出してパブリッシュ ストリームのリクエストでセッションを開くのに問題があり、CLOSED_LOGIN_FAILED 状態を受け取りました。ログイン ダイアログでキャンセルしようとすると、このセッション状態を受け取りました。CLOSED_LOGIN_FAILED 状態で再度 openForPublish を呼び出そうとすると、「セッション: 既に開いているセッションを開こうとしました。」という例外が発生しました。私が session.isOpened をチェックしたとき、私は FALSE で、isClosed は TRUE です。

これは私のコードです:

        Session session = Session.getActiveSession();

    if (session == null) { 
        Log.w("Facebook Session", "TopicShow object is null");
        if (savedInstanceState != null) {
            Log.w("Facebook Session", "TopicShow Restoring Session");
            session = Session.restoreSession(activity, null, fbSessionStateCallback, savedInstanceState);
        }
        if (session == null) {
            session = new Session(activity.getApplicationContext());
        } 
    }

    Session.setActiveSession(session);



    Log.w("Facebook", "Session inital state when clicked " + session.getState().name());
    Log.w("SessionState", "isOpen = " + !session.isOpened() + " isClosed = " + !session.isClosed());
    if (!session.isOpened()) {
        Log.w("Facebook", "openForRead " + session.getState().name());
        /* Prevent it from getting error if no internet. */

            OpenRequest request = new Session.OpenRequest(activity);

            request.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);
            request.setPermissions(Arrays.asList("publish_stream"));  
            request.setCallback(fbPublishRequestStateCallback);

            isBlock = false;

            session.openForPublish(request);     
    } 

    else if (session.isOpened()) {
        Request request = Request.newMeRequest(session, graphUserCallback);
        request.executeAndWait();
        isBlock = true; 
    }
4

2 に答える 2

1

これは仕様によるものです。閉じたセッションを再開することはできません。代わりに、新しい Session() を作成するか、activeSession メソッドの 1 つを呼び出すだけです。

于 2013-04-08T19:58:07.097 に答える
0

SDK には、これを処理する方法を提案する 1 つの Facebook サンプル プロジェクトがあります。私の答えを参照してください: Android Facebook セッションの問題

于 2013-07-16T11:24:07.097 に答える