【问题标题】:Android Facebook session issueAndroid Facebook 会话问题
【发布时间】:2013-05-22 09:29:23
【问题描述】:

我使用以下代码进行 Facebook 身份验证,它工作正常,但是当我取消身份验证并尝试再次进行身份验证时,应用程序崩溃并且日志是由以下原因引起的:java.lang.UnsupportedOperationException: Session: an attempt was made to open an already opened session.
在调试时我得到了这样的

{Session state:CREATED, token:{AccessToken token:ACCESS_TOKEN_REMOVED permissions:[]}, appId:xxxxxxxxxxxxxxx}

我该如何解决这个问题。请帮助我。在此先感谢

private void askFacebbokAuthentication() {

        Session session = Session.getActiveSession();
        if (session.isOpened()) {

            facebook = true;
            if (!hasPublishPermission()) {

                session.requestNewPublishPermissions(new NewPermissionsRequest(
                        MyActivity.this, PERMISSIONS));

            }
        } else {
            Session.OpenRequest openRequest = null;
            openRequest = new Session.OpenRequest(MyActivity.this);
            if (openRequest != null) {

                openRequest.setDefaultAudience(SessionDefaultAudience.FRIENDS);

                if (!hasPublishPermission()) {
                    openRequest.setPermissions(PERMISSIONS);
                }
                session.openForPublish(openRequest);
            }
        }
    }

【问题讨论】:

    标签: android facebook facebook-android-sdk


    【解决方案1】:

    我也有同样的问题,但我用这些线解决了。据我所知,我们无法为已打开的新权限请求会话。

    Session session = new Session(this);
        Session.setActiveSession(session);
        session.openForRead(new Session.OpenRequest(this).setCallback(callback).setPermissions(Arrays.asList("your_permissions")));
    

    我希望你已经在onActivityResult()下面添加了

    Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
    

    【讨论】:

    • 权限是什么?
    • 谢谢 Aswin,但你在哪里添加前三行?
    【解决方案2】:

    如果Session既没有打开也没有关闭,我觉得还是Session.openActiveSession()比较好

    此片段是从 Facebook SDK 示例项目 SessionLoginSample、LoginUsingActivityActivity#onClickLogin() 复制粘贴的

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

    请注意,Session#openActiveSession() 也会在后台创建一个 Session,这没关系。来自https://developers.facebook.com/docs/technical-guides/iossdk/session/#lifecycle

    会话只能打开一次。当会话关闭时,它不能 被重新打开。相反,应该创建一个新会话。典型应用 任何时候都只需要一个活动会话。 Facebook SDK 提供负责打开新的静态活动会话方法 会话实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多