web-dev-qa-db-fra.com

[Facebook-iOS-SDK 4.0] Comment obtenir l'adresse électronique d'un utilisateur à partir de FBSDKProfile

Je suis en train de mettre à niveau mon application vers Facebook-iOS-SDK-4., mais il semble que je ne puisse pas recevoir de courrier électronique d'utilisateur FBSDKProfile, car il ne fournit que le nom d'utilisateur, le nom d'utilisateur, etc. .

45
imcc

Pour récupérer des e-mails, vous devez utiliser l'API graphique, en fournissant spécifiquement le champ de paramètres rempli avec les champs souhaités. Jetez un coup d'œil à l'outil d'exploration Graph API de Facebook, qui peut vous aider à comprendre les requêtes. https://developers.facebook.com/tools/Explorer

Le code qui a fonctionné pour moi pour récupérer les emails est le suivant, ce qui suppose que vous êtes déjà connecté:

    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);
     }];
128
genericdan

C'est correct. L'adresse électronique n'est pas présente dans l'objet FBSDKProfile. Vous devez utiliser l'API graphique de FB à la place. Il existe de nombreux exemples d’informations et de codes sur le site des développeurs FB https://developers.facebook.com/docs/ios/graph

Pour répondre à votre question, essayez quelque chose comme ça.

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

Code corrigé:

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

Essayez ce code:

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);
                     }
                 }];
            }
        }
    }
}];
5
Dhaval H. Nena

Ces paramètres donne l'email

NSDictionary *parameters = @{@"fields":@"email"};

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

à partir de Graph API v2.4, les requêtes GET pour/me doivent contenir un paramètre explicite "fields"

3
Ted

Depuis le site de développeur de Facebook https://developers.facebook.com/docs/facebook-login/permissions/v2.2

Remarque: même si vous demandez l'autorisation par courrier électronique, il n'est pas garanti que vous obtiendrez une adresse électronique. Par exemple, si une personne s'est inscrite pour Facebook avec un numéro de téléphone au lieu d'une adresse électronique, le champ de l'adresse électronique peut être vide.

J'espère que ça va aider quelqu'un :)

2
DaNLtR

Je voulais ajouter quelque chose à ce que j'ai trouvé. Pour mon FBSDKGraphRequest j'essayais de transmettre les autorisations que je demandais au moment de la connexion en tant que champs. Donc je plaçais fields comme quelque chose comme:

"email,user_location"

Cependant, les autorisations et les champs sont différents. Pour référence, ce sont les champs: https://developers.facebook.com/docs/graph-api/reference/v2.4/user

Donc, sur la base de ce lien que vous souhaitez transmettre:

"email,location"

J'espère que ça aide quelqu'un!

1
tvalent2
if ([FBSDKAccessToken currentAccessToken]) {
   [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"email"}]
    startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
      if (!error) {
                    }
  }];
}                    
0
harish babu