如何使用Facebook sdk获取朋友和电子邮件列表

时间:2014-12-04 13:07:16

标签: ios objective-c facebook facebook-graph-api

我有一个问题,我在我的视图控制器中实现Facebook SDK,并希望使用Facebook获取朋友和电子邮件列表。我写了这个:

FBLoginView *loginView = [[FBLoginView alloc] initWithReadPermissions:@[@"public_profile", @"email", @"user_friends"]];

loginView.delegate = self;

然后使用FBLoginViewDelegate的协议方法:

- (void)loginViewFetchedUserInfo:(FBLoginView *)loginView
                            user:(id<FBGraphUser>)user 
{
  self.profilePictureView.profileID = user.id;
  self.nameLabel.text = user.name;
  NSLog(@"%@", user);
  NSLog(@"%@", [user objectForKey:@"email"]);
}

在控制台中我得到了这个:

2014-12-04 14:56:48.746 FBLoginUIControlSample[2941:613] 

"first_name" = Pavel;
gender = male;
id = 1379600000000000;
"last_name" = name;
link = "https://www.facebook.com/app_scoped_user_id/1379600000000000/";
locale = "ru_RU";
name = "Pavel name";
timezone = 2;
"updated_time" = "2014-12-03T11:47:13+0000";
verified = 1;

2014-12-04 14:56:48.748 FBLoginUIControlSample[2941:613] (null)

3 个答案:

答案 0 :(得分:2)

抱歉,但你不能

阅读Facebook Permissions

您只能在用户登录时获得email,但您无法获得用户friends email

我不太确定,但也许你可以使用&#34; friendsusername&#34; @ facebook.com(&#34; facebook email&#34;)。

我发现了这个,https://www.facebook.com/help/224049364288051

此人必须激活@facebook选项。

答案 1 :(得分:0)

对于Facebook SDK 3.0的朋友,你可以这样做

FBRequest* friendsRequest = [FBRequest requestForMyFriends];
[friendsRequest startWithCompletionHandler: ^(FBRequestConnection *connection,
                                  NSDictionary* result,
                                  NSError *error) {
    NSArray* friends = [result objectForKey:@"data"];
    NSLog(@"Found: %i friends", friends.count);
    for (NSDictionary<FBGraphUser>* friend in friends) {
        NSLog(@"I have a friend named %@ with id %@", friend.name, friend.id);
    }
}];

除了您的电子邮件之外,您无法访问任何用户的电子邮件。
因为FBGraphUser没有电子邮件@property,我们无法访问类似名称(点语法)的信息,但是NSDictionary仍然有电子邮件kv-pair,我们可以像访问正常情况一样访问它的NSDictionary。 使用此方法,您可以访问您的电子邮件。

if (FBSession.activeSession.isOpen) {
    [[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) {
         if (!error) {
             self.nameLabel.text = user.name;
             self.emailLabel.text = [user objectForKey:@"email"];
         }
     }];
}

答案 2 :(得分:-2)

希望这会对你有所帮助

您可以使用viewDidLoad

中的以下代码获取好友列表
[FBRequestConnection startWithGraphPath:@"me/taggable_friends"
                                 parameters:nil
                                 HTTPMethod:@"GET"
                          completionHandler:^(
                                              FBRequestConnection *connection,
                                              id result,
                                              NSError *error
                                              ) {

                          }];

和一些info

修改

上面的答案只提到好友列表而不是电子邮件(因为上面的答案已经很清楚),现在你想要的朋友列表

朋友列表(朋友列表V 2.2) - 一个对象,指的是由某人创建或自动为某人生成的朋友组(例如&#34;关闭朋友&#34;或&#34;熟人&# 34;列表)

from v2.0 you'll only be able to get all friends via the /me/taggable_friends(见result