2016-03-23 120 views
0

我正在嘗試在我的應用中獲取名稱,ID等的Facebook好友列表。在iOS中獲取Facebook好友列表

- (IBAction)onFBLogin:(id)sender { 
    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; 
    [login 
    logInWithReadPermissions: @[@"public_profile", @"email", @"user_friends"] 
    fromViewController:self 
    handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 
     if (error) { 
      NSLog(@"Process error"); 
     } else if (result.isCancelled) { 
      NSLog(@"Cancelled"); 
     } else { 
      NSLog(@"%@", result); 
      [self getFBEmailAddress]; 
     } 
    }]; 
} 
-(void)getFBEmailAddress{ 
    [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" 
             parameters:@{@"fields": @"picture, email, friends"}] 
    startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { 
     if (!error) { 
      NSString *pictureURL = [NSString stringWithFormat:@"%@",[result objectForKey:@"picture"]]; 
      mFBId = [NSString stringWithFormat:@"%@",[result objectForKey:@"id"]]; 
      NSLog(@"My Profile : %@", result); 
      NSLog(@"email is %@", [result objectForKey:@"email"]); 

      [self getFBFriendList]; 
     } 
     else{ 
      NSLog(@"%@", [error localizedDescription]); 
     } 
    }]; 
} 
-(void)getFBFriendList{ 

    NSString* graphPat = [[NSString alloc] initWithFormat:@"%@/friends", mFBId]; 

    FBSDKGraphRequest *requestFriends = [[FBSDKGraphRequest alloc] 
             initWithGraphPath:graphPat 
             parameters:@{@"fields": @"id, name"} 
             HTTPMethod:@"GET"]; 
    [requestFriends startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, 
               id result, 
               NSError *error) { 
     if (!error && result) 
     { 
      NSArray *allFriendsResultData = [result objectForKey:@"data"]; 

      if ([allFriendsResultData count] > 0) 
      { 
       for (NSDictionary *friendObject in allFriendsResultData) 
       { 
        NSString *friendName = [friendObject objectForKey:@"name"]; 
        NSString *friendID = [friendObject objectForKey:@"id"]; 
        NSLog(@"%@ : %@", friendID, friendName); 

       } 
      } 
     } 

    }];} 

我已經成功通過Facebook登錄並獲得我的個人資料。之後,我試圖通過朋友圖api獲得朋友列表。但那個時候,它只是說下面的朋友數。

friends =  { 
     data =   (
     ); 
     summary =   { 
      "total_count" = 2; 
     }; 
    }; 
    id = 60XXXXXX1295X; 
    picture =  { 
     data =   { 
      "is_silhouette" = 0; 
      url = "https://scontent.xx.fbcdn.net/hprofile-xfa1/v/t1.0-1/p50x50/1..._501957533..."; 
     }; 
    }; 

如何獲取朋友列表的完整信息,如身份證,姓名等?如果有任何人已經實施,請幫助我。謝謝。

回答

1

這個工作適合我。

NSMutableArray *completeList = [[NSMutableArray alloc] init]; 
[self fetchFacebookEachFriend:completeList withGrapPath:@"/me/friends" withCallback:^(BOOL success, NSMutableArray * fbList) { 
    //Finish get All Friends 
    fbListFinal(success, fbList); 
}]; 


- (void)fetchFacebookEachFriend:(NSMutableArray *)completeList withGrapPath:(NSString *)graphPath withCallback:(returnFbList)fbList 
{ 
    NSDictionary *limitDictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"first_name, last_name, middle_name, name, email", @"fields", nil]; 
    FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:graphPath parameters:limitDictionary HTTPMethod:@"GET"]; 
    [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { 
     if (error) { 
      [[[UIAlertView alloc] initWithTitle:@"Alert!" message:@"Please connect to Facebook to find your friends" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil] show]; 
      fbList(NO, completeList); 
      return; 
     } 

     //Add each friend to list 
     for (NSDictionary *friend in [result valueForKey:@"data"]) { 
      [completeList addObject:friend]; 
     } 

     if ([result valueForKey:@"paging"] != nil && [[result valueForKey:@"paging"] valueForKey:@"next"] != nil) { 
      NSString *nextPage = [[result valueForKey:@"paging"] valueForKey:@"next"]; 
      nextPage = [[nextPage componentsSeparatedByString:@"?"] objectAtIndex:1]; 
      [self fetchFacebookEachFriend:completeList withGrapPath:[NSString stringWithFormat:@"me/friends?%@",nextPage] withCallback:fbList]; 
     } else 
      fbList(YES, completeList); 
    }]; 
} 
0

result.paging.next包含完整的URL,包含訪問令牌和全部。我覺得最簡單的事情就是給它傳遞給一個NSURLSession數據任務:

NSString *nextPage = result[@"paging"][@"next"]; 
if (!nextPage) return; 
[[[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:nextPage] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { 
    id json = [self decodeJSONResult:data response:response error:error]; 
    // use json 
}] resume]; 

我寫這爲FBSDKGraphRequest擴展:FBSDKGraphRequest+Paging.h

相關問題