在 iOS 中获取 Facebook 好友列表
Posted
技术标签:
【中文标题】在 iOS 中获取 Facebook 好友列表【英文标题】:Get Facebook Friend List in iOS 【发布时间】:2016-03-23 19:55:11 【问题描述】:我正在尝试在我的应用中获取包含姓名、ID 等的 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 登录并获取我的个人资料。之后,我尝试通过friends graph 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...";
;
;
如何获取好友列表的完整信息,例如 id、name 等?如果有人已经实施,请帮助我。谢谢。
【问题讨论】:
请告诉我如何解决这个问题。 【参考方案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);
];
【讨论】:
【参考方案2】: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
【讨论】:
以上是关于在 iOS 中获取 Facebook 好友列表的主要内容,如果未能解决你的问题,请参考以下文章
Facebook SDK 错误 Domain=com.facebook.sdk Code=5 在 ios 中获取好友列表时
如何使用 FBSDK for iOS 获取 Facebook 好友列表?