2015-12-06 4 views
3

Я видел много вопросов, подобных этому в Stack Overflow, но они не решили мою проблему. Я говорил this, this, а также ссылки на документацию, как this и thisКак мне получить список друзей из FaceBook?


я использовал LoginButton для входа в моем приложении.

Я могу получить пользователя (который вошел в систему) Имя, Email, и т.д., используя следующий код (он отлично работает):

private FacebookCallback<LoginResult> callback = new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      AccessToken accessToken = loginResult.getAccessToken(); 
      Profile profile = Profile.getCurrentProfile(); 
        GraphRequest request = GraphRequest.newMeRequest(
        loginResult.getAccessToken(), 
        new GraphRequest.GraphJSONObjectCallback() { 
         @Override 
         public void onCompleted(
           JSONObject object, 
           GraphResponse response) { 
          // Application code 
          try { 

           email = object.getString("email"); 
          } catch (JSONException e) { 
           e.printStackTrace(); 
          } 
          Log.e("EMAIL",email); 
          Log.e("GraphResponse", "-------------" + response.toString()); 
         } 
        }); 
      Bundle parameters = new Bundle(); 
      parameters.putString("fields", "id,link,gender,birthday,email"); 
      request.setParameters(parameters); 
      request.executeAsync(); 
} 

с разрешениями:

loginButton.setReadPermissions("user_friends"); 
loginButton.registerCallback(callbackManager, callback); 

Я получил JSON в LogCat. Но теперь я хочу, чтобы получить список Друзей, поэтому я написал код, видя документации и немного изменил код следующим образом:

private FacebookCallback<LoginResult> callback = new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      AccessToken accessToken = loginResult.getAccessToken(); 
      Profile profile = Profile.getCurrentProfile(); 
      // I saw following code in Documentation 
      new GraphRequest(
        AccessToken.getCurrentAccessToken(), 
        "/{friendlist-id}", /* I actually tried ,friend-list-id' , /me/friends' , '/me/taggable_Friends' and many*/ 
        null, 
        HttpMethod.GET, 
        new GraphRequest.Callback() { 
         public void onCompleted(GraphResponse response) { 
     // handle the result 
          Log.d("RESPONSE KBT",response.toString()); 
         } 
        } 
      ).executeAsync(); 

     } 

с разрешениями:

loginButton.setReadPermissions(Arrays.asList("email", "user_friends","read_custom_friendlists")); 
loginButton.registerCallback(callbackManager, callback); 

Я получаю это в моем LogCat:

RESPONSE KBT﹕ {Response: responseCode: 404, graphObject: null, error: {HttpStatus: 404, errorCode: 803, errorType: OAuthException, errorMessage: (#803) Some of the aliases you requested do not exist: {friendlist-id}}} 
+1

Вы можете получить только 2 «тип» друзей: TaggableFriends или InvitableFriends (для игры приложение), если бы taggableFriends я код .. –

+0

@Michele Lacorte: Я тоже пробовал taggablefriends, Я получил тот же самый логарифм. Это будет полезно, если вы поделитесь своим кодом. (В любом случае, это не игровое приложение, это простое приложение, чтобы показать список друзей, и я действительно делаю это для образовательной цели) – Ganesh

+0

Вы хотите пометить друзей? если нет, не используйте taggable_friends. – luschn

ответ

2

Правильный API конечной точки, чтобы получить друзей авторизованного пользователя является /me/friends и вам нужно авто horize с разрешением user_friends. Имейте в виду, что вы получите только друзей, которые утвердили ваше приложение с user_friends.

Вы можете ТОЛЬКО получить доступ ко всем друзьям для пометки (с /me/taggable_friends) или приглашать друзей в игру с реализацией Canvas (с /me/invitable_friends).

Дополнительная информация: Facebook Graph Api v2.0+ - /me/friends returns empty, or only friends who also use my app

+0

Вы имеете в виду, что вы не можете войти в список друзей пользователя? Мне не нужны только друзья, которые используют мое приложение. Мне нужны все друзья, есть ли способ сделать это? – Ganesh

+1

нет, нет способа, по соображениям конфиденциальности. только друзья, которые разрешили ваше приложение, тоже появляются с/me/friends. – luschn

+0

Я использовал taggable frns конечную точку ... И это дало мне несколько имен друзей ... хорошо спасибо за очищение моего сомнения – Ganesh

0

Попробуйте обойтись без скобок {}

new GraphRequest(
        AccessToken.getCurrentAccessToken(), 
        "/me/friendlist-id", /* I actually tried ,friend-list-id' , /me/friends' , '/me/taggable_Friends' and many*/ 
        null, ......); 
+0

Я тоже пробовал ... Получая одно сообщение logcat. – Ganesh

+0

Это фактический идентификатор, нет конечной точки, называемой/me/friendlist-id – luschn

4

Попробуйте это:

Разрешение:

setReadPermissions(Arrays.asList("public_profile", "email", "user_friends")); 

Эта переменная для процесса ваши друзья:

public static List<TaggableFriends> friendListFacebook = new ArrayList<TaggableFriends>(); 

Этот метод для получения друзей (назовем его в onSuccess() методом в ваш класс входа):

public void getFriends() 
{ 
    if(AccessToken.getCurrentAccessToken() != null) 
    { 
     GraphRequest graphRequest = GraphRequest.newGraphPathRequest(
       AccessToken.getCurrentAccessToken(), 
       "me/taggable_friends", 
       new GraphRequest.Callback() 
       { 
        @Override 
        public void onCompleted(GraphResponse graphResponse) 
        { 
         if(graphResponse != null) 
         { 
          JSONObject jsonObject = graphResponse.getJSONObject(); 
          String taggableFriendsJson = jsonObject.toString(); 
          Gson gson = new Gson(); 
          TaggableFriendsWrapper taggableFriendsWrapper= gson.fromJson(taggableFriendsJson, TaggableFriendsWrapper.class); 
          ArrayList<TaggableFriends> invitableFriends = new ArrayList<TaggableFriends>(); 
          invitableFriends = taggableFriendsWrapper.getData(); 
          int i; 
          for(i = 0; i < invitableFriends.size(); i++) 
          { 
           try 
           { 
            friendListFacebook.add(invitableFriends.get(i)); 
           } 
           catch(Exception e){} 
          } 
         }else { 

         } 

        } 
       } 
     ); 

     Bundle parameters = new Bundle(); 
     parameters.putInt("limit", 5000); //5000 is maximum number of friends you can have on Facebook 

     graphRequest.setParameters(parameters); 
     graphRequest.executeAsync(); 
    } 
} 

Добавить этот класс:

TaggableFriendsWrapper:

public class TaggableFriendsWrapper { 

private ArrayList<TaggableFriends> data; 
private Paging paging; 

public ArrayList<TaggableFriends> getData() { 
return data; 
} 

public void setData(ArrayList<TaggableFriends> data) { 
this.data = data; 
} 

public Paging getPaging() { 
return paging; 
} 

public void setPaging(Paging paging) { 
this.paging = paging; 
} 

public class Paging { 

private Cursors cursors; 
public Cursors getCursors() { 
    return cursors; 
} 

public void setCursors(Cursors cursors) { 
    this.cursors = cursors; 
} 
} 

public class Cursors { 
private String after; 
private String before; 

public String getAfter() { 
    return after; 
} 
public void setAfter(String after) { 
    this.after = after; 
} 
public String getBefore() { 
    return before; 
} 
public void setBefore(String before) { 
    this.before = before; 
} 

} 
} 

TaggableFriends:

public class TaggableFriends { 

private String id; 
private String name; 
private Picture picture; 

public String getId() { 
return id; 
} 
public void setId(String id) { 
this.id = id; 
} 
public String getName() { 
return name; 
} 
public void setName(String name) { 
this.name = name; 
} 

public Picture getPicture() { 
return picture; 
} 
public void setPicture(Picture picture) { 
this.picture = picture; 
} 

public class Picture { 

private Data data; 

public Data getData() { 
    return data; 
} 

public void setData(Data data) { 
    this.data = data; 
} 
} 

public class Data { 

private String url; 
private boolean is_sillhouette; 

public String getUrl() { 
    return url; 
} 
public void setUrl(String url) { 
    this.url = url; 
} 
public boolean isIs_sillhouette() { 
    return is_sillhouette; 
} 
public void setIs_sillhouette(boolean is_sillhouette) { 
    this.is_sillhouette = is_sillhouette; 
} 
} 
} 
+0

Это класс com.google.gson.Gson, и это похоже на Json –

+0

Его высказывание несовместимой ошибки в этой строке -> invitableFriends = taggableFriendsWrapper .получить данные(); <- И еще одна ошибка: -> не удается разрешить символ 'friendListFacebook' <- на следующей строке – Ganesh

+0

вам нужно добавить friendListFacebook (я его написал) в вашем классе и импортировать TaggableFriends и TaggableFriendsWrapper ... код работает , Я уверяю вас! –

Смежные вопросы