Получение информации о пользователе из Facebook в iOS

Я новичок в разработке iPhone. Я делаю приложение, в котором у пользователя есть 2 входа через Facebook, как только он отправляет свои учетные данные и нажимает кнопку "Вход", мне нужно получить такие данные, как Имя, адрес электронной почты и пол из Facebook, и после того, как пользователь должен будет настроить пользователя на страницу регистрации приложения с заполненными данными, и мне нужно, чтобы это приложение совместимо для iPhone 4,4 и 5.

Я попытался сделать это, используя API-интерфейс Facebook Graph, но не смог его получить, поэтому любой может помочь мне.

Спасибо в Advance.

Ответ 1

Вы можете сделать это, используя следующий код:

[FBSession openActiveSessionWithReadPermissions:@[@"email",@"user_location",@"user_birthday",@"user_hometown"]
                                   allowLoginUI:YES
                              completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {

                                  switch (state) {
                                      case FBSessionStateOpen:
                                          [[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) {
                                              if (error) {
                                               NSLog(@"error:%@",error);                                               
                                              }
                                              else
                                              {                                                   
                                                  // retrive user details at here as shown below
                                                  NSLog(@"FB user first name:%@",user.first_name);
                                                  NSLog(@"FB user last name:%@",user.last_name);
                                                  NSLog(@"FB user birthday:%@",user.birthday);
                                                  NSLog(@"FB user location:%@",user.location);
                                                  NSLog(@"FB user username:%@",user.username);
                                                  NSLog(@"FB user gender:%@",[user objectForKey:@"gender"]);
                                                  NSLog(@"email id:%@",[user objectForKey:@"email"]);
                                                  NSLog(@"location:%@", [NSString stringWithFormat:@"Location: %@\n\n",
                                                                         user.location[@"name"]]);

                                              }
                                          }];
                                          break;

                                      case FBSessionStateClosed:
                                      case FBSessionStateClosedLoginFailed:
                                          [FBSession.activeSession closeAndClearTokenInformation];
                                          break;

                                      default:
                                          break;
                                  }

                              } ];

и не забывайте импортировать FacebookSDK/FacebookSDK.h в свой код.

EDIT: обновление для Facebook SDK v4 (23 апреля 2015 г.)

Теперь Faceboook выпустил новый SDK с серьезными изменениями. В котором класс FBSession устарел. Таким образом, всем пользователям предлагается перейти на новые sdk и API.

Ниже я упомянул, как мы можем получить информацию о пользователе через Facebook SDK v4:

if ([FBSDKAccessToken currentAccessToken]) {
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
  if (!error) {
     NSLog(@"fetched user:%@", result);
  }
 }];
}

Но прежде чем получать информацию о пользователе, мы должны интегрировать новый вход в Facebook в нашем коде, как описано в Документация здесь.

Здесь есть Changelog для SDK v4. Я предлагаю пройти через это для обновления.

Ответ 2

Добавить файл info.plist:

введите описание изображения здесь

  - (IBAction)btn_fb:(id)sender
    {
      if (!FBSession.activeSession.isOpen)
            {
                NSArray *_fbPermissions =    @[@"email",@"publish_actions",@"public_profile",@"user_hometown",@"user_birthday",@"user_about_me",@"user_friends",@"user_photos",];

        [FBSession openActiveSessionWithReadPermissions:_fbPermissions allowLoginUI:YES completionHandler:^(FBSession *session,FBSessionState state, NSError *error)
         {
             if (error)
             {
                 UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:error.localizedDescription delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
                 [alertView show];
             }
             else if(session.isOpen)
             {
                 [self btn_fb:sender];
             }


         }];


        return;
    }


    [FBRequestConnection startWithGraphPath:@"me" parameters:[NSDictionary dictionaryWithObject:@"cover,picture.type(large),id,name,first_name,last_name,gender,birthday,email,location,hometown,bio,photos" forKey:@"fields"] HTTPMethod:@"GET" completionHandler:^(FBRequestConnection *connection, id result, NSError *error)
     {
         {
             if (!error)
             {
                 if ([result isKindOfClass:[NSDictionary class]])
                 {
                     NSLog(@"%@",result);

                 }
             }
         }
     }];
}

Ответ 3

Пожалуйста, обратитесь к следующим ссылкам, так как вы можете получить некоторые идеи.

https://www.parse.com/tutorials/integrating-facebook-in-ios

Facebook iOS 6 - получите информацию о пользователе

получить данные профиля пользователя Facebook после получения токена доступа в iOS 5

Отобразить имя и изображение профиля пользователя через экземпляр Facebook для iOS

Как кэшировать информацию о пользователе Facebook с помощью Facebook в приложении IOS

Как получить полный объект пользователя с помощью API-интерфейса Facebook и facebook ios sdk?

Надеюсь, это поможет вам....

Ответ 4

Использовать API FBConnect для получения информации о пользователе. easy-use

API Fbconnect

Надеюсь, что это сработает для вас:)

Ответ 5

вам нужно использовать путь к графу для получения информации о пользователе.

-(void)getEmailId
{ 
 [facebook requestWithGraphPath:@"me" andDelegate:self];
}

- (void)openSession
{
 if (internetActive) {
  NSArray *permissions=[NSArray arrayWithObjects:@"read_stream",@"email",nil];

  [FBSession openActiveSessionWithReadPermissions:permissions allowLoginUI:YES completionHandler:
   ^(FBSession *session,
   FBSessionState state, NSError *error) {
   [self sessionStateChanged:session state:state error:error];
  }];
 }else
 {
  UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"" message:@"Internet Not Connected" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
  [alert show];
 }
}

#pragma mark- request delegate methods 

- (void)request:(FBRequest *)request didLoad:(id)result
{
  NSLog(@"request did load successfully....");

//  __block NSDictionary *dictionary=[[NSDictionary alloc] init];

 if ([result isKindOfClass:[NSDictionary class]]) {
  NSDictionary* json = result;

  NSLog(@"email id is %@",[json valueForKey:@"email"]);
  NSLog(@"json is %@",json);

  [[NSUserDefaults standardUserDefaults] setValue:[json valueForKey:@"email"] forKey:@"fbemail"];
  [self.viewController login:YES];
 }
}

- (void)request:(FBRequest *)request didFailWithError:(NSError *)error
{
 UIAlertView *alertView=[[UIAlertView alloc] initWithTitle:@"" message:@"Server not responding.." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];

 [alertView show];

 [self fblogout];
 [self showLoginView];
 NSLog(@"request did fail with error");
}


- (void)sessionStateChanged:(FBSession *)session
                      state:(FBSessionState) state
                      error:(NSError *)error
{
 switch (state) {
  case FBSessionStateOpen: {
      //state open action
  }

   // Initiate a Facebook instance
   facebook = [[Facebook alloc]
                    initWithAppId:FBSession.activeSession.appID
                    andDelegate:nil];

   // Store the Facebook session information
   facebook.accessToken = FBSession.activeSession.accessToken;
   facebook.expirationDate = FBSession.activeSession.expirationDate;

   if (![[NSUserDefaults standardUserDefaults] valueForKey:@"fbemail"]) {
    [MBProgressHUD showHUDAddedTo:self.viewController.view animated:YES];
    [self getEmailId];
   }

   break;
  case FBSessionStateClosed:
  case FBSessionStateClosedLoginFailed:
   // Once the user has logged in, we want them to
   // be looking at the root view.
   [self.navController popToRootViewControllerAnimated:NO];

   [FBSession.activeSession closeAndClearTokenInformation];
   facebook = nil;

   [self showLoginView];
   break;
  default:
   break;
 }

 [[NSNotificationCenter defaultCenter]
  postNotificationName:FBSessionStateChangedNotification
  object:session];

 if (error) {
  UIAlertView *alertView = [[UIAlertView alloc]
                            initWithTitle:@"Error"
                            message:error.localizedDescription
                            delegate:nil
                            cancelButtonTitle:@"OK"
                            otherButtonTitles:nil];
  [alertView show];
 }
}

Ответ 6

FBRequest *request = [FBRequest requestForMe];
[request startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
    if (!error) {
        // handle successful response
    } else if ([error.userInfo[FBErrorParsedJSONResponseKey][@"body"][@"error"][@"type"] isEqualToString:@"OAuthException"]) { // Since the request failed, we can check if it was due to an invalid session
        NSLog(@"The facebook session was invalidated");
        [self logoutButtonTouchHandler:nil];
    } else {
        NSLog(@"Some other error: %@", error);
    }
}];

Ответ 7

В настоящее время Facebook обновляет версию SDK до 4.x. Чтобы получить информацию о профиле пользователя, вам нужно будет явно вызвать API-интерфейс графа после успешного входа (запросить необходимые разрешения).

FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/me"
           parameters:@{ @"fields": @"id,name,email"}
           HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];