web-dev-qa-db-fra.com

Facebook SDK 3.0: comment recevoir le courrier électronique de l'utilisateur?

Dans le "vieux" SDK iOS FB, je pouvais recevoir des informations sur l’utilisateur via:

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

Comment puis-je faire cela avec le nouveau FB iOS SDK 3.0? Dois-je utiliser FBRequest ou FBOpenGraphAction ou FBGraphObject ou une combinaison de ceux-ci ou quelque chose de complètement différent?

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

Étant donné que FBGraphUser ne possède pas d'e-mail @property, nous ne pouvons pas accéder aux informations comme avec le nom (syntaxe à points), cependant, le NSDictionary a toujours l'e-mail kv-pair et nous pouvons y accéder comme nous le ferions avec un NSDictionary normal. .

N'oubliez pas de demander l'autorisation par courrier électronique:

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

Une fois que vous avez accès à (id<FBGraphUser>)user, vous pouvez simplement utiliser user[@"email"]

5
Zorayr

à partir de cela, nous pouvons obtenir les informations de base des utilisateurs de Facebook et leur adresse électronique.

[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

    }];
1
Vineesh TP

Avez-vous lu le code source du SDK 3.0? Il y a une méthode que je pense est identique:

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

La méthode la plus simple pour obtenir les informations après la connexion est la suivante: 

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

}

Vous obtiendrez toutes les informations sur le résultat.

0
Ashish