Facebook SDK 3.0:如何接收用户的电子邮件?

znq*_*znq 25 sdk facebook ios

在"旧"FB iOS SDK中,我可以通过以下方式接收用户信息:

NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                   @"SELECT uid, name, email, pic FROM user WHERE uid=me()", @"query",
                                   nil];

    JBFacebookManager *fbManager = [JBFacebookManager getInstance];
    fbManager.requestDelegate = self;

    [fbManager.facebook requestWithMethodName:@"fql.query"
                                     andParams:params
                                 andHttpMethod:@"POST"
                                   andDelegate:self];
Run Code Online (Sandbox Code Playgroud)

如何使用新的FB iOS SDK 3.0执行此操作?我是否需要使用FBRequest或者FBOpenGraphActionFBGraphObject那些或完全不同的组合?

znq*_*znq 68

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"];
         }
     }];
}
Run Code Online (Sandbox Code Playgroud)

因为FBGraphUser没有电子邮件@property,我们无法访问类似名称(点 - 语法)的信息,但是NSDictionary仍然有电子邮件kv-pair,我们可以像访问普通的NSDictionary那样访问它.

不要忘记要求电子邮件许可:

NSArray *permissions = [[NSArray alloc] initWithObjects:@"email", nil];
[FBSession sessionOpenWithPermissions:permissions completionHandler:
 ^(FBSession *session, FBSessionState state, NSError *error) {
     [self facebookSessionStateChanged:session state:state error:error];
 }];
Run Code Online (Sandbox Code Playgroud)

  • sessionOpenWithPermissions:@ @ "电子邮件"]; 一个简短易读的线. (4认同)

Zor*_*ayr 5

一旦你有权访问(id<FBGraphUser>)user,你可以简单地使用,user[@"email"].