【问题标题】:Facebook Android SDK Session openForPublish not creating a new sessionFacebook Android SDK 会话 openForPublish 未创建新会话
【发布时间】:2013-04-05 18:22:52
【问题描述】:

当我调用时在 Facebook Android SDK 中

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

它获得了一个 FB 会话,并且一切都正常运行。但是当我用Publish 替换Read 时。即跟随

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

它给出一个错误,说会话是空的,并且不能获得空会话的发布权限。

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

【问题讨论】:

    标签: android facebook facebook-graph-api facebook-android-sdk


    【解决方案1】:

    我花了一些时间来解决这个问题,这样用户就可以点击一个按钮在 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】:

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

      长答案是,除非您已经拥有基本或默认权限(如果您调用 openForRead 并使用空权限集)。所以 openForPublish 实际上处理了一个非常特殊的小众用例,大多数应用程序可能没有。

      【讨论】:

      • 嗯,很糟糕的 FB sdk 设计。
      • 我有同样的问题,我需要做的是允许我的 facebook 应用程序在用户墙上共享数据,每次我打开会话进行发布时,它都不会从已安装的应用程序中读取用户令牌并要求我重新输入我的凭据,所以你有没有找到任何可以帮助我的东西
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多