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