Facebook SDK 3.0:在会话状态CLOSED_LOGIN_FAILED期间无法调用openForPublish

时间:2013-04-03 22:42:05

标签: android facebook session login

我有一个问题是调用openForPublish打开一个带有发布流请求的会话并收到CLOSED_LOGIN_FAILED状态。当我尝试在登录对话框中取消时,我收到了此会话状态。 当我在CLOSED_LOGIN_FAILED状态期间再次尝试调用openForPublish时,我收到一个异常,说“Session:尝试打开已经打开的会话。”。当我检查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; 
    }

2 个答案:

答案 0 :(得分:1)

这是设计的。您无法重新打开已关闭的会话。相反,只需创建一个新的Session()或调用其中一个activeSession方法。

答案 1 :(得分:0)

SDK中有一个Facebook示例项目,建议如何处理此问题。 请参阅我的回答:Android Facebook session issue