fbsdkcorekit ios facebook sdk

fbsdkcorekit - facebook api ios



Facebook SDK 3.0: ¿cómo recibir el correo electrónico del usuario? (5)

En el "antiguo" FB iOS SDK pude recibir información del usuario a través de lo siguiente:

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];

¿Cómo puedo hacer esto con el nuevo FB iOS SDK 3.0? ¿Debo usar FBRequest o FBOpenGraphAction o FBGraphObject o una combinación de esos o algo completamente diferente?


¿Leíste el código fuente del 3.0 SDK? Hay un método que creo que es idéntico:

- (FBRequest*)requestWithMethodName:(NSString *)methodName andParams:(NSMutableDictionary *)params andHttpMethod:(NSString *)httpMethod andDelegate:(id <FBRequestDelegate>)delegate;


El método más fácil para obtener la información después de iniciar sesión es:

-(IBAction)loginWithFacebook:(id)sender{ FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; [login logInWithReadPermissions: @[@"public_profile",@"email"] fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { if (error) { NSLog(@"Process error"); } else if (result.isCancelled) { NSLog(@"Cancelled"); } else { NSLog(@"Logged in"); [self getFacebookProfileInfos]; } }]; } -(void)getFacebookProfileInfos { NSDictionary *parameters = @ {@"fields": @"id, name, first_name, last_name, picture.type(large), email"}; if ([FBSDKAccessToken currentAccessToken]) { [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:parameters] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { if (!error) { NSLog(@"fetched user:%@", result); } }]; }

}

Obtendrás toda la información del resultado.


Una vez que tenga acceso al (id<FBGraphUser>)user , simplemente podría usar el user[@"email"] .


de esto podemos obtener información básica de usuario de Facebook y correo electrónico.

[FBSession openActiveSessionWithReadPermissions:@[@"basic_info",@"email"] allowLoginUI:YES completionHandler:^(FBSession *session,FBSessionState status,NSError *error){ if(error) { NSLog(@"Facebook Error : %@",error.localizedDescription); } else{ } // Respond to session state changes, // ex: updating the view }];


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"]; } }]; }

Debido a que FBGraphUser no tiene un @property correo @property , no podemos acceder a la información como con el nombre (sintaxis de punto), sin embargo, el NSDictionary todavía tiene el par de kv de correo electrónico y podemos acceder a él como lo haríamos con un normal NSDiccionario.

No olvides pedir el permiso de correo electrónico sin embargo:

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