2013-10-12 101 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

相關問題