代码之家  ›  专栏  ›  技术社区  ›  rahulg

Facebook Android SDK会话openForPublish未创建新会话

  •  5
  • rahulg  · 技术社区  · 12 年前

    当我调用时,在Facebook Android SDK中

    Session tempSession = new Builder(this).build();
    Session.setActiveSession(tempSession);
    tempSession.openForRead(new OpenRequest(this).setPermissions(FB_PERMISSIONS));
    

    它有一个FB会话,一切正常运行。但当我更换 Read 具有 Publish .即如下

    Session tempSession = new Builder(this).build();
    Session.setActiveSession(tempSession);
    tempSession.openForPublish(new OpenRequest(this).setPermissions(FB_PERMISSIONS));
    

    它给出一个错误,即会话为空,无法获得空会话的发布权限。

    你能告诉我为什么会这样吗?最好的处理方法是什么?

    2 回复  |  直到 12 年前
        1
  •  7
  •   K Boden    11 年前

    我花了一段时间才解决这个问题,这样用户就可以点击一个按钮在Facebook上的订阅源中分享我的一个产品。我不希望他们在真正想要分享之前被提示登录,所以我真的只想获得发布许可。以下内容将初始登录/读取权限请求与发布权限请求叠加在一起。这将双重提示用户,首先是读取,然后是发布,但无论解决方案如何,现在都需要这样做:

    Session session = Session.getActiveSession();
    
    if (session == null) {
        session = new Session.Builder(this).setApplicationId("<APP ID HERE>").build();
    
        Session.setActiveSession(session);
        session.addCallback(new StatusCallback() {
            public void call(Session session, SessionState state, Exception exception) {
                if (state == SessionState.OPENED) {
                    Session.OpenRequest openRequest = new Session.OpenRequest(FacebookActivity.this);
                    openRequest.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);
                    session.requestNewPublishPermissions(
                            new Session.NewPermissionsRequest(FacebookActivity.this, PERMISSIONS));
                }
                else if (state == SessionState.OPENED_TOKEN_UPDATED) {
                    publishSomething();
                }
                else if (state == SessionState.CLOSED_LOGIN_FAILED) {
                    session.closeAndClearTokenInformation();
                    // Possibly finish the activity
                }
                else if (state == SessionState.CLOSED) {
                    session.close();
                    // Possibly finish the activity
                }
            }});
    }
    
    if (!session.isOpened()) {
        Session.OpenRequest openRequest = new Session.OpenRequest(this);
        openRequest.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);
        session.openForRead(openRequest);
    }
    else
        publishSomething();
    
        2
  •  4
  •   Ming Li    12 年前

    简单的回答是,不要调用openForPublish。如果您需要发布权限,请稍后调用openForRead,然后请求NewPublishPermissions。

    长期的答案是,除非你已经拥有基本或默认权限(如果你用空权限集调用openForRead,你会得到什么),否则你不能请求发布权限(针对从未通过你的应用程序连接过Facebook的用户)。因此,openForPublish实际上处理了一个大多数应用程序可能没有的非常特定的利基用例。