2015-02-12 296 views
2

我想要獲得所有使用Facebook Android SDK 3.23.0的朋友的列表。如何使用Android Facebook SDK獲取完整的朋友列表

我只得到前20個結果,當試圖進入下一頁時,我只是得到一個空的結果。

下面的代碼:

Request.GraphUserListCallback callback = new Request.GraphUserListCallback() { 
     @Override 
     public void onCompleted(List<GraphUser> graphUsers, Response response) { 
      parseFriends(graphUsers); 
     } 
    }; 

    Bundle params = new Bundle(); 
    params.putString("fields", "id, name"); 
    Request request = Request.newMyFriendsRequest(mSession, callback); 

    while (request != null) { 
     request.setParameters(params); 

     Response response = request.executeAndWait(); 

     if (response.getError() != null) { 
      Log.e(TAG, "Error in request: " + response.getError().toString()); 
      break; 
     } else { 
      request = response.getRequestForPagedResults(Response.PagingDirection.NEXT); 
     } 
    } 

那是不行的,第二請求(由getRequestForPagedResults()創建的)基本上是空的(圖路徑爲「null」)。

當我看到第一個請求的響應,「下一個」標籤似乎是完美的罰款:

https://graph.facebook.com/v2.2/625641456/friends?fields=id,name&format=json&access_token=[TOKEN]&limit=25&offset=25&__after_id=[ID]

(我不知道爲什麼偏移量爲25時,第一個請求只返回20個結果。我正在使用默認限制,我認爲這是25)。

我的備份計劃是跟蹤我處理的元素數量,並簡單地將「偏移量」添加到我傳入的包中。但是這導致第二個請求爲空,而其「下一個」爲空。

所以我試着從第一個請求中解析出結果的「下一個」字符串,並將它的所有內容傳遞到捆綁中,即_after_id,offset,limit等等,但是結果相同 - 空結果,沒有「下一個」。

如何正確檢索完整的朋友列表?

回答

4

簡單的答案:這是不可能的。 Facebook刪除了檢索朋友數據的選項。唯一的例外是來自使用相同應用程序的朋友,所以在我所有的朋友中,有20人明顯使用我的應用程序,而那些是我從我的查詢中獲得的人。

除此之外,您無法再獲取完整的朋友列表或關於這些朋友的詳細信息。

+0

從安全/隱私的角度來看,這是有道理的,而且它也可以以這種方式工作。在好的時候,這也是http(沒有's'),你得到了所有的朋友信息,如果你挖了一點,甚至是非朋友信息:)。 – 2015-02-20 08:30:41

1

嘗試將限制從25設置爲無限制(或非常大的限制),並讓代碼的其餘部分保持原樣。我在舊版本中使用SDK,並且它有時以特殊的方式工作(但我傾向於記住,我獲得了完整的朋友列表,無論其大小如何)。

另外,嘗試在while之外移動request.setParams()。如果請求有任何臨時狀態,則只需覆蓋它們。 Facebook可能會拒絕相同的請求,這些請求會逐漸過快以減輕DoS攻擊。

+0

謝謝波格丹!嘗試了這一切,但沒有奏效。 – EboMike 2015-02-20 06:18:29

0

如果您將「v2.2」更改爲「v1.0」,則您將獲得所需的內容,但請注意1.0 api即將過期。