1

我构建了一个使用 XMPP 连接到 facebook 聊天的 facebook 应用程序。而且效果很好。但最近在我试图授权的帐户上,它没有请求正确的权限,导致我的应用程序无法工作。下面是我的应用程序从 facebook 获得的权限的两个屏幕截图。一个清楚地显示出比另一个更多的权限。我请求许可的代码没有改变:

Session session = Session.getActiveSession();

        if (session == null) {
            if (savedInstanceState != null) {
                session = Session.restoreSession(this, null, statusCallback,
                        savedInstanceState);
            }
            if (session == null) {
                session = new Session(this);
            }
            Session.setActiveSession(session);
            if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
                session.openForRead(new Session.OpenRequest(this)
                        .setPermissions(
                                Arrays.asList("xmpp_login",
                                        "user_online_presence",
                                        "friends_online_presence",
                                        "read_mailbox", "read_friendlists"))
                        .setCallback(statusCallback));
            }
        }

正确的权限: 在此处输入图像描述

不正确:

在此处输入图像描述

4

1 回答 1

2

尝试解决什么问题(通读文档) - 但评论太长了。

不同之处似乎在于第一个用户之前已经对应用程序进行了身份验证:您可以判断为“最后访问”是“基本信息”。在这种情况下,用户可能拥有“SessionState.CREATED_TOKEN_LOADED”,但其他用户可能拥有“SessionState.CREATED”,因为之前没有缓存令牌。如果在调用“openForRead”之前检查这两种状态会发生什么?如果这个失败,你是否在其他地方有另一个“开放”可能会扫除?另一个可能不会请求权限。

基于文档的另一条评论是您对“Session.setActiveSession(session);”的调用 您不能使用尚未打开的会话来调用它。所以你可能应该把它移到“openForRead”调用之后,否则它可能会抛出异常,另一个 open() 请求会清除后果。

于 2013-10-16T05:09:00.517 回答