react last objective-c facebook-ios-sdk facebook-ios-sdk-4.0

objective-c - last - ios bundle id facebook



[Facebook-iOS-SDK 4.0] Cómo obtener la dirección de correo electrónico del usuario de FBSDKProfile (7)

Código corregido:

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

Estoy actualizando mi aplicación a Facebook-iOS-SDK-4.0 , pero parece que no puedo obtener el correo electrónico de usuario de FBSDKProfile , ya que solo proporciona, nombre de usuario, ID de usuario, etc.


Desde el sitio para desarrolladores de Facebook https://developers.facebook.com/docs/facebook-login/permissions/v2.2

Tenga en cuenta que, incluso si solicita el permiso por correo electrónico, no está garantizado, obtendrá una dirección de correo electrónico. Por ejemplo, si alguien se registró en Facebook con un número de teléfono en lugar de una dirección de correo electrónico, el campo de correo electrónico puede estar vacío.

Espero que ayude a alguien :)


Eso es correcto. La dirección de correo electrónico no está presente en el objeto FBSDKProfile. Deberías usar la API Graph de FB en su lugar. Hay un montón de ejemplos de información y códigos en el sitio de FB Developer https://developers.facebook.com/docs/ios/graph

Para responder a tu pregunta, prueba algo como esto.

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


Estos parámetros dan el correo electrónico

NSDictionary *parameters = @{@"fields":@"email"}; [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:parameters] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { NSLog(@"fetched user:%@", result); }];

comenzando con Graph API v2.4, las solicitudes GET para / me deben contener un parámetro explícito de "campos"


Para recuperar el correo electrónico, debe utilizar la API del gráfico, que proporciona específicamente el campo de parámetros rellenado con los campos que desea. Eche un vistazo a la herramienta de exploración Graph API de Facebook, que puede ayudar a resolver las consultas. https://developers.facebook.com/tools/explorer

El código que me ayudó a buscar el correo electrónico es el siguiente, que supone que ya ha iniciado sesión:

NSMutableDictionary* parameters = [NSMutableDictionary dictionary]; [parameters setValue:@"id,name,email" forKey:@"fields"]; [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:parameters] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { aHandler(result, error); }];


Prueba este código:

FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; [login logInWithReadPermissions:@[@"email"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { if (error) { // Process error } else if (result.isCancelled) { // Handle cancellations } else { // If you ask for multiple permissions at once, you // should check if specific permissions missing if ([result.grantedPermissions containsObject:@"email"]) { if ([FBSDKAccessToken currentAccessToken]) { [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { if (!error) { NSLog(@"fetched user:%@", result); } }]; } } } }];


Quería agregar esto a lo que encontré. Para mi FBSDKGraphRequest estaba tratando de pasar los permisos que estaba solicitando al iniciar sesión como los campos. Así que estaba configurando fields como algo así como:

"email,user_location"

Sin embargo, los permisos y los campos son diferentes. Como referencia, estos son campos: https://developers.facebook.com/docs/graph-api/reference/v2.4/user

Entonces basado en ese enlace que quiere pasar:

"email,location"

Espero que ayude a alguien!