安卓Facebook会话问题

6

我使用了以下代码进行Facebook认证,它运行良好,但当我取消认证并尝试重新认证时,应用程序崩溃了,并且日志显示了 Caused by: 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);
            }
        }
    }
2个回答

13

我也遇到了同样的问题,但我用以下几行代码解决了。据我所知,我们无法为已经打开的权限请求新的会话。

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

什么是权限? - Amitsharma
谢谢Aswin,但你在哪里添加前三行? - user2872493

3
如果会话既没有打开也没有关闭,我认为最好使用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()在幕后也创建了一个会话,这是可以的。来自https://developers.facebook.com/docs/technical-guides/iossdk/session/#lifecycle
会话只能打开一次。当会话关闭时,无法重新打开。相反,应创建新会话。典型应用程序一次只需要一个活动会话。Facebook SDK提供了静态活动会话方法,负责打开新的会话实例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接