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. .
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);
}];
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);
}
}];
}
Code corrigé:
if ([FBSDKAccessToken currentAccessToken]) {
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
id result, NSError *error) {
if (!error) {
NSLog(@"fetched user:%@", result);
}
}];
}
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);
}
}];
}
}
}
}];
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"
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 :)
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!
if ([FBSDKAccessToken currentAccessToken]) {
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"email"}]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
if (!error) {
}
}];
}