我构建了一个使用XMPP连接到Facebook聊天的Facebook应用程序。它运作得很好。但最近在我试图授权它的帐户上没有请求正确的权限,阻止我的应用程序工作。 Bellow是我的应用从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));
}
}
更正权限:
不正确:
答案 0 :(得分:2)
尝试解决什么问题(阅读文档) - 但对于演出来说太长了。
差异似乎是第一个用户之前已经对应用程序进行了身份验证:您可以将“最后访问权限”称为“基本信息”。在这种情况下,用户可能具有“SessionState.CREATED_TOKEN_LOADED”,但其他用户可能具有“SessionState.CREATED”,因为之前没有缓存的令牌。如果在调用“openForRead”之前检查这两种状态会发生什么?如果这个失败,你在其他地方还有另一个“开放”吗?另一个人可能不会要求权限。
基于docs的另一个评论是你调用“Session.setActiveSession(session);”你不能用尚未打开的会话来调用它。所以你可能应该把它移到“openForRead”调用之后,否则它可能会再次抛出异常,另一个open()请求会扫除后果。