2014年7月2日 星期三

Android 開發 (四十九) 取得好友名單 facebook v1 before 3.14

在3.14版本(5/1)號以前的facebook app可以取得好友名單,要怎麼取得好友名單呢,方法很簡單

只需要使用Request.newMyFriendsRequest API 就可以取得好友清單,
範例如下

 public void requestFriend(){
  
   Request request = Request.newMyFriendsRequest(Session.getActiveSession(),
              new Request.GraphUserListCallback() {

      @Override
      public void onCompleted(List<GraphUser> users, Response response) {
       if(users!=null){
        String uri = null;
        List<FriendModel> FriendData= new ArrayList<FacebookFriend.FriendModel>();
        Map<String, FriendModel> maps = new HashMap<String, FacebookFriend.FriendModel>();
        for(GraphUser user :users){
         FriendModel model = new FriendModel(user);
         FriendData.add(model); 
         maps.put(model.Id, model);
        }
                     

       }
      }
                  
              });
   Bundle params = new Bundle();
         params.putString("fields", "id,name,picture");
         request.setParameters(params);
         request.executeAsync();
 }

在params中加入的fields代表查詢時會回傳的資料,在取得GraphUser 之後,就是要想辦法取得userId,userPicture了,該怎麼做呢?  看看範例




 public static class FriendModel{
  private String name;
  private String Id;
  private String picture;
  public FriendModel(GraphUser user){
   name = user.getName();
   Id = user.getId();
   picture  = getPicture(user);
  }
  public FriendModel(String _name,String _Id,String _picture){
   name = _name;
   Id = _Id;
   picture  = _picture;     
  }
  
  public String getName(){
   return name;
  }
  
  public String getId(){
   return Id;
  }
  
  public String getPicture(){
   return picture;
  }
  
  private String getPicture(GraphUser user){
   String uri="";
   Object o = user.getProperty("picture");
         if (o instanceof String) {
             uri = (String) o;
         } else if (o instanceof JSONObject) {
             ItemPicture itemPicture = GraphObject.Factory.create((JSONObject) o).cast(ItemPicture.class);
             ItemPictureData data = itemPicture.getData();
             if (data != null) {
                 uri = data.getUrl();
             }
         }
         uri = uri.replace("s50x50", "s100x100");
         return uri;
  }
 }
 private interface ItemPicture extends GraphObject {
        ItemPictureData getData();
    }

    // Graph object type to navigate the JSON that sometimes comes back instead of a URL string
    private interface ItemPictureData extends GraphObject {
        String getUrl();
    }


要圖案的話就必須利用上面的方式取得user的圖案,但是這邊有個Tricky的點,就是我將取得的圖檔轉成了100x100 不過這種方法在某些情況下可能會取不到user的圖。 在取得好友圖像以及ID之後就可以做更多的事情啦,例如tag好友,POST朋友塗鴉牆,invite好友....etc

4 則留言:

  1. 請問3.17.2版facebook sdk 要怎麼取的好友資料@@

    回覆刪除
    回覆
    1. 目前只能利用invitable friend 來取得可邀請的好友,並且會有相關的圖片和姓名,不過問題是他回傳的id 是暫時性的token,也就是說不是唯一,所以不能用該id來判斷是否為同一人,如何call那隻api 你可以參考http://tedforum.blogspot.tw/2014/05/android-facebook-v20314sdk.html

      刪除
  2. 您好,同樣的問題,現階段(5/1後)有什麼方法可以正確取得好友的facebook 實際id?

    回覆刪除
    回覆
    1. 目前我也還沒有看到新的方法可以取得真的fb id ,只能取得app scope id

      刪除