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?
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];
}];
Une fois que vous avez accès à (id<FBGraphUser>)user
, vous pouvez simplement utiliser user[@"email"]
.
à 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
}];
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;
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.