2015-04-06 4 views
21

Я довольно новичок в объектно-ориентированной и iPhone-среде разработки.Получение личной информации пользователя от Facebook в iOS

Я внедряю вход в Facebook в своем приложении, чтобы получить имя пользователя, адрес электронной почты и изображение профиля. Я успешно внедрил login Part и получил имя и идентификатор пользователя.

Теперь я хочу получить электронную почту пользователя и фотографию профиля с Facebook. Но у меня нет идеи, как ее получить. Я пользуюсь Facebook IOS SDK v4.0.

Как я могу получить изображение пользователя и адрес электронной почты от Facebook, когда у меня есть идентификатор пользователя?

+0

проверить это .... http://stackoverflow.com/questions/29466795/getting-facebook-public-profile-of-a-person-in-ios-app/29466882#29466882 – Shruti

+0

HTTP://переполнение стека.com/questions/22111993/how-to-get-user-info-from-facebook-sdk-in-ios – tharif

+0

@Shruti Это нормально, я уже пробовал реализовать эту ссылку, но у меня есть только имя и фамилия, получение электронной почты ID –

ответ

55

Для получения ID-адреса электронной почты вы должны запросить разрешение для по электронной почте при регистрации.

FBSDKLoginButton *loginView = [[FBSDKLoginButton alloc] init]; 
loginView.readPermissions = @[@"email"]; 
loginView.frame = CGRectMake(100, 150, 100, 40); 
[self.view addSubview:loginView]; 

Вы можете получить идентификатор электронной почты пользователя в новом SDK, используя GraphPath.

[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil] 
     startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { 

      if (!error) { 
       NSLog(@"fetched user:%@ and Email : %@", result,result[@"email"]); 
     } 
     }]; 
    } 

результат будет получить вам все пользователем данные и результат [@ «электронная почта»], что Вы получите электронную почту для зарегистрированного пользователя.

Чтобы получить профиль изображение, которое вы можете использовать

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://graph.facebook.com/%@/picture?type=normal",result[@"id"]]]; 
NSData *data = [NSData dataWithContentsOfURL:url]; 
_imageView.image = [UIImage imageWithData:data]; 

или и можно также использовать FBSDKProfilePictureView получить профиль Изображение пропусканием Профиль пользователя Id:

FBSDKProfilePictureView *profilePictureview = [[FBSDKProfilePictureView alloc]initWithFrame:_imageView.frame]; 
[profilePictureview setProfileID:result[@"id"]]; 
[self.view addSubview:profilePictureview]; 

См: https://developers.facebook.com/docs/facebook-login/ios/v2.3#profile_picture_view

или u также можно получить как путем передачи параметров, так и параметров

[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" 
              parameters:@{@"fields": @"picture, email"}] 
     startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { 
      if (!error) { 
       NSString *pictureURL = [NSString stringWithFormat:@"%@",[result objectForKey:@"picture"]]; 

       NSLog(@"email is %@", [result objectForKey:@"email"]); 

       NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:pictureURL]]; 
       _imageView.image = [UIImage imageWithData:data]; 

      } 
      else{ 
       NSLog(@"%@", [error localizedDescription]); 
      } 
     }]; 
+1

hi dheeraj Я пробовал это, но я получаю null в своем письме. –

+0

Вы должны запросить разрешение на отправку электронной почты при регистрации. –

+0

Я сделал FBSDKLoginButton * loginButton = [[FBSDKLoginButton alloc] init]; loginButton.center = self.view.center; [self.view addSubview: loginButton]; self.loginButton.readPermissions = @ [@ "public_profile", @ "email"]; в мой взглядDidLoad –

21

Извините за этот грязный ответ, это мой первый ответ. Вы можете использовать запрос FBSDK Graph для получения информации о всех профилях пользователя и класса FBSDKProfilePictureView, чтобы легко получить профиль профиля пользователя. Этот код предназначен для пользовательского интерфейса пользователя Facebook.

Во-первых, вы должны поместить этот код, где начать процесс Логин:

FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; 

[login logInWithReadPermissions:@[@"public_profile", @"email"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 

    if (error) 
    { 

    // There is an error here. 

    } 
    else 
    { 
     if(result.token) // This means if There is current access token. 
     {  
      // Token created successfully and you are ready to get profile info 
      [self getFacebookProfileInfo]; 
     }   
    } 
}]; 

И если Войти успешна, реализовать этот метод, чтобы получить общий профиль пользователя;

-(void)getFacebookProfileInfos { 

FBSDKGraphRequest *requestMe = [[FBSDKGraphRequest alloc]initWithGraphPath:@"me" parameters:nil]; 

FBSDKGraphRequestConnection *connection = [[FBSDKGraphRequestConnection alloc] init]; 

[connection addRequest:requestMe completionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { 

     if(result) 
     {    
     if ([result objectForKey:@"email"]) { 

      NSLog(@"Email: %@",[result objectForKey:@"email"]); 

     } 
     if ([result objectForKey:@"first_name"]) { 

      NSLog(@"First Name : %@",[result objectForKey:@"first_name"]); 

     } 
     if ([result objectForKey:@"id"]) { 

      NSLog(@"User id : %@",[result objectForKey:@"id"]); 

     } 

     } 

}]; 

[connection start]; 

Получить вошедшего в профиль изображения профиля:

FBSDKProfilePictureView *pictureView=[[FBSDKProfilePictureView alloc]init]; 

[pictureView setProfileID:@"user_id"]; 

[pictureView setPictureMode:FBSDKProfilePictureModeSquare]; 

[self.view addSubview:pictureView]; 

Вы должны добавить освежающий код в ваш метод viewDidLoad:

[FBSDKProfile enableUpdatesOnAccessTokenChange:YES]; 
+0

facebookLoginButtonTouched не получает вызов –

+0

Я использую пользовательскую кнопку входа в Facebook в своем проекте. Итак, «facebookLoginButtonTouched» - это мой пользовательский метод входа в систему «коснулся внутри». Теперь я редактирую свой ответ. –

+1

Наиболее релевантный ответ в этой теме. Далеко от Месси. Спасибо, чувак! –

4
Hope This could Help You .. 

- (IBAction)Loginwithfacebookaction:(id)sender 
{ 


    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; 
    [login logOut]; 

    [login logInWithReadPermissions:@[@"public_profile"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 
     if (error) 
     { 
      NSLog(@"Process error"); 
     } 
     else if (result.isCancelled) 
     { 
      NSLog(@"Cancelled"); 
     } 
     else 
     { 
      [self getFacebookProfileInfos]; 
     } 
    }]; 
} 

- (void)finishedWithAuth: (GTMOAuth2Authentication *)auth 
        error: (NSError *) error { 

    NSLog(@"Received error %@ and auth object %@",error, auth); 
    if (!error) 
    { 
     email =signIn.userEmail; 
     [[NSUserDefaults standardUserDefaults] setObject:email forKey:@"useremail"]; 
     NSLog(@"Received error and auth object %@",signIn.userEmail); 
     NSLog(@"Received error and auth object %@",signIn.userID); 
     if (auth.userEmail) 
     { 
      [[[GPPSignIn sharedInstance] plusService] executeQuery:[GTLQueryPlus queryForPeopleGetWithUserId:@"me"] completionHandler:^(GTLServiceTicket *ticket, GTLPlusPerson *person, NSError *error) 
      { 
       // this is for fetch profile image 
       NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",person.image.url]]; 
       NSLog(@"%@",url); 
       name= person.displayName; 
        [[NSUserDefaults standardUserDefaults] setObject:name forKey:@"userNameLogin"]; 
        [[NSUserDefaults standardUserDefaults] synchronize]; 
       NSLog(@"Name:%@",person.displayName); 
       [self callWebserviceToUploadImage]; 
      }]; 

     } 
    } 
} 

-(void)getFacebookProfileInfos { 

    FBSDKGraphRequest *requestMe = [[FBSDKGraphRequest alloc]initWithGraphPath:@"/me?fields=first_name, last_name, picture, email" parameters:nil]; 

    FBSDKGraphRequestConnection *connection = [[FBSDKGraphRequestConnection alloc] init]; 


    [connection addRequest:requestMe completionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { 

     if(result) 
     { 
      if ([result objectForKey:@"email"]) { 
       email = [result objectForKey:@"email"]; 

       [[NSUserDefaults standardUserDefaults] setObject:email forKey:@"useremail"]; 

      } 
      if ([result objectForKey:@"first_name"]) { 

       NSLog(@"First Name : %@",[result objectForKey:@"first_name"]); 
       name = [result objectForKey:@"first_name"]; 
       [[NSUserDefaults standardUserDefaults] setObject:name forKey:@"userNameLogin"]; 

      } 
      if ([result objectForKey:@"id"]) 
      { 

       NSLog(@"User id : %@",[result objectForKey:@"id"]); 

      } 
     } 
     [self callfbloginwebservice]; 

    }]; 
    [connection start]; 

} 
1
#import <FBSDKCoreKit/FBSDKAccessToken.h> 
#import <FBSDKCoreKit/FBSDKGraphRequest.h> 

Добавить YourViewController.h

- (IBAction)loginAction:(id)sender { 

    // https://developers.facebook.com/docs/graph-api/reference/user 
    // https://developers.facebook.com/docs/ios/graph 


    if ([FBSDKAccessToken currentAccessToken]) { 
     [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"email,name,first_name,last_name"}] 
     startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { 
      if (!error) { 
       NSLog(@"fetched user:%@", result); 
       // Here u can update u r UI like email name TextField 
      } 
     }]; 


    } 

}