在iOS应用程序中获取一个人的Facebook公开个人资料

我正在开发一个需要Facebooklogin的ios应用程序。我已经成功地实现了login过程。但现在我无法find如何以及在哪里可以获得用户的个人资料信息,如名字,姓氏,个人资料图片等。 ..我的应用程序有权限访问名字,姓氏,configuration文件图片和电子邮件。

以下是使用最新的Facebook SDK v4.0.1获取人员public_profile的代码。 您需要使用FBSDKProfile来获取个人资料。

-(void)viewDidLoad{ FBSDKLoginButton *loginButton = [[FBSDKLoginButton alloc] init]; [self.view addSubview:loginButton]; self.loginButton.readPermissions = @[@"public_profile", @"email", @"user_friends"]; self.loginButton.delegate = self; [FBSDKProfile enableUpdatesOnAccessTokenChange:YES]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(profileUpdated:) name:FBSDKProfileDidChangeNotification object:nil]; } -(void)profileUpdated:(NSNotification *) notification{ NSLog(@"User name: %@",[FBSDKProfile currentProfile].name); NSLog(@"User ID: %@",[FBSDKProfile currentProfile].userID); } - (void) loginButton:(FBSDKLoginButton *)loginButton didCompleteWithResult:(FBSDKLoginManagerLoginResult *)result error:(NSError *)error{ } - (void)loginButtonDidLogOut:(FBSDKLoginButton *)loginButton{ } 

使用通知方法,以便当它从Facebook接收信息时,它可以调用Facebook委托方法

  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleFBSessionStateChangeWithNotification:) name:@"SessionStateChangeNotification" object:nil]; 

之后执行这个方法

 -(void)handleFBSessionStateChangeWithNotification:(NSNotification *)notification{ NSDictionary *userInfo = [notification userInfo]; FBSessionState sessionState = [[userInfo objectForKey:@"state"] integerValue]; NSError *error = [userInfo objectForKey:@"error"]; // Usually, the only interesting states are the opened session, the closed session and the failed login. if (!error) { // In case that there's not any error, then check if the session opened or closed. if (sessionState == FBSessionStateOpen) { [FBRequestConnection startWithGraphPath:@"me" parameters:@{@"fields": @"first_name, last_name, picture.type(normal), email"} HTTPMethod:@"GET" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) { if (!error) { // Set the use full name. NSLog(@"first name and last name is %@",[NSString stringWithFormat:@"%@ %@", [result objectForKey:@"first_name"], [result objectForKey:@"last_name"] ]); NSString *firstName = [NSString stringWithFormat:@"%@",[result objectForKey:@"first_name"]]; NSString *middleName = [NSString stringWithFormat:@"%@",[result objectForKey:@"middle_name"]]; NSString *lastName = [NSString stringWithFormat:@"%@",[result objectForKey:@"last_name"]]; NSString *email = [NSString stringWithFormat:@"%@",[result objectForKey:@"email"]]; // Set the e-mail address. NSLog(@"email is %@", [result objectForKey:@"email"]); } else{ NSLog(@"%@", [error localizedDescription]); } }]; // [self.btnToggleLoginState setTitle:@"Logout" forState:UIControlStateNormal]; } else if (sessionState == FBSessionStateClosed || sessionState == FBSessionStateClosedLoginFailed){ // A session was closed or the login was failed. Update the UI accordingly. // [self.btnToggleLoginState setTitle:@"Login" forState:UIControlStateNormal]; // self.lblStatus.text = @"You are not logged in."; } } }