【问题标题】:Facebook Android SDK 3.0 callback not called on cancel取消时未调用 Facebook Android SDK 3.0 回调
【发布时间】:2013-01-28 21:49:28
【问题描述】:

我正在尝试使用 Facebook Android SDK v3.0 升级现有的应用程序/框架,但我不知道如何使用额外权限进行身份验证。

问题在于,如果用户取消,StatusCallback 似乎不会触发。如果我使用对Session.openActiveSession 的常规调用,回调会在取消时触发,但在新的Session 对象上使用新的Session.OpenRequest 不会。

这是我的代码:

Session.OpenRequest auth = new Session.OpenRequest(this);

String[] permissions = {"publish_stream", "user_status"};

auth.setPermissions(Arrays.asList(permissions));

auth.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);

auth.setCallback(new Session.StatusCallback() {
    @Override
    public void call(Session session, SessionState state, Exception exception) {
        switch(state) {

            case OPENING:
                System.out.println("OPENING");
                break;              

            case OPENED: // <-- NOT CALLED
                System.out.println("OPENED");
                break;

            case CREATED: // <-- NOT CALLED
                System.out.println("CREATED");
                break;

            case CREATED_TOKEN_LOADED: // <-- NOT CALLED
                System.out.println("CREATED_TOKEN_LOADED");
                break;

            case OPENED_TOKEN_UPDATED: // <-- NOT CALLED
                System.out.println("OPENED_TOKEN_UPDATED");
                break;

            case CLOSED: // <-- NOT CALLED
                System.out.println("CLOSED");
                break;      

            case CLOSED_LOGIN_FAILED: // <-- NOT CALLED
                System.out.println("CLOSED_LOGIN_FAILED");
                break;                          
        }
    }
});

Session session = new Session.Builder(this).setApplicationId("<My APP ID>").build();
session.openForPublish(auth);

这会在设备上生成如下视图:

http://cl.ly/image/0E2C0t2m2b0g

(未安装 FB 应用程序)。如果用户单击关闭按钮(左上角),则不会触发回调。

如果我在同一场景中使用Session.openActiveSession,则会触发回调。

这是一个错误,还是我做错了什么?

谢谢!

【问题讨论】:

    标签: android facebook


    【解决方案1】:

    发现问题。手动创建会话时,必须将此会话设置为静态会话实例上的“活动会话”:

    Session session = new Session.Builder(this).setApplicationId("<My APP ID>").build();
    Session.setActiveSession(session); // <-- MUST DO THIS
    session.openForPublish(auth);
    

    【讨论】:

      猜你喜欢
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-16
      相关资源
      最近更新 更多