2013-10-12 69 views
1

我构建了一个使用XMPP连接到Facebook聊天的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)); 
      } 
     } 

正确的权限: enter image description here

错误:

enter image description here

+0

你是否从你的facebook应用程序获得了所需权限的对话框?因为如果我在开始会话时没有记错,它应该请求这些权限(如果不是在经过身份验证的会话中) – JoxTraex

+0

这些屏幕截图显示了用户拥有*权限授予应用程序的权限,他们没有显示auth中显示的权限集对话框显示给用户 - 是否正确地询问您要求的权限?如果没有,您确定您尝试打开的会话是否正确应用了请求的权限集? – Igy

+0

@Igy在进行一些测试之后,当用户在进行身份验证时询问用户的权限时,似乎并不一致,即使我的代码永远不会更改。 – Peter

回答

2

隔空刺伤解决什么(通过文档阅读) - 但对于评论来说太长了。

区别似乎是第一位用户先前已经对应用程序进行了身份验证:您可以将“上次访问”告诉“基本信息”。在这种情况下,用户可能具有“SessionState.CREATED_TOKEN_LOADED”,但其他用户可能具有“SessionState.CREATED”,因为没有先前高速缓存的令牌。在调用“openForRead”之前检查两个状态会发生什么?你在别处是否有另外一个“开放”,如果这个失败了,它可能会扫荡起来?另一个可能不会要求权限。

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

+0

谢谢!你是完全正确的,我没有意识到,但是当if(session.getState()。equals(SessionState.CREATED_TOKEN_LOADED))语句不满意时,它跳过该登录并使用另一个登录意识到在没有正确的权限的情况下。你甚至对它一再抛弃的例外是正确的。非常感谢你的帮助! – Peter

+0

@Peter如果这是正确的答案给罗比的赏金;)欢呼声 – Dyna

+0

@Dyna谢谢你的提醒,我忘记赏金单独授予正确的:) – Peter

相关问题