J'ai lu beaucoup de tutoriels sur l'obtention d'informations sur Facebook, mais j'ai échoué jusqu'à présent. Je veux juste obtenir le nom d'utilisateur et la photo de profil de Facebook.
- (IBAction)login:(id)sender {
[FBSession openActiveSessionWithReadPermissions:@[@"email",@"user_location",@"user_birthday",@"user_hometown"]
allowLoginUI:YES
completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
switch (state) {
case FBSessionStateOpen:
[[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) {
if (error) {
NSLog(@"error:%@",error);
} else {
// retrive user's details at here as shown below
NSLog(@"FB user first name:%@",user.first_name);
NSLog(@"FB user last name:%@",user.last_name);
NSLog(@"FB user birthday:%@",user.birthday);
NSLog(@"FB user location:%@",user.location);
NSLog(@"FB user username:%@",user.username);
NSLog(@"FB user gender:%@",[user objectForKey:@"gender"]);
NSLog(@"email id:%@",[user objectForKey:@"email"]);
NSLog(@"location:%@", [NSString stringWithFormat:@"Location: %@\n\n",
user.location[@"name"]]);
}
}];
break;
case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
[FBSession.activeSession closeAndClearTokenInformation];
break;
default:
break;
}
} ];
}
J'ai utilisé ce code pour obtenir des informations, mais je ne peux obtenir aucune information. Pouvez-vous m'aider à ce sujet? ou Pouvez-vous préférer un tutoriel pour le lire? J'ai lu des tutoriels sur developer.facebook.com.
Merci pour ton intérêt.
C'est le moyen le plus simple que j'ai trouvé pour obtenir la photo de profil de l'utilisateur.
[[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *FBuser, NSError *error) {
if (error) {
// Handle error
}
else {
NSString *userName = [FBuser name];
NSString *userImageURL = [NSString stringWithFormat:@"https://graph.facebook.com/%@/picture?type=large", [FBuser objectID]];
}
}];
Les autres paramètres de requête pouvant être utilisés sont:
if ([FBSDKAccessToken currentAccessToken]) {
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{ @"fields" : @"id,name,picture.width(100).height(100)"}]startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
if (!error) {
NSString *nameOfLoginUser = [result valueForKey:@"name"];
NSString *imageStringOfLoginUser = [[[result valueForKey:@"picture"] valueForKey:@"data"] valueForKey:@"url"];
NSURL *url = [[NSURL alloc] initWithURL: imageStringOfLoginUser];
[self.imageView setImageWithURL:url placeholderImage: nil];
}
}];
}
Faites la demande de graphique suivante:
/me?fields=name,picture.width(720).height(720){url}
Et vous obtenez une image de profil vraiment grande et cool:
{
"id": "459237440909381",
"name": "Victor Mishin",
"picture": {
"data": {
"url": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-xpf1/t31.0-1/c628.148.1164.1164/s720x720/882111_142093815957080_669659725_o.jpg"
}
}
}
P.S. /me?fields=picture.type(large)
ne le fait pas pour moi.
Vous pouvez également obtenir le nom d'utilisateur et l'image comme suit:
[FBSession openActiveSessionWithReadPermissions:@[@"basic_info"]
allowLoginUI:YES
completionHandler:
^(FBSession *session, FBSessionState state, NSError *error) {
if(!error && state == FBSessionStateOpen) {
{ [FBRequestConnection startWithGraphPath:@"me" parameters:[NSMutableDictionary dictionaryWithObjectsAndKeys:@"id,name,first_name,last_name,username,email,picture",@"fields",nil] HTTPMethod:@"GET" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
NSDictionary *userData = (NSDictionary *)result;
NSLog(@"%@",[userData description]);
}];
}
}
}];
Output:
picture = {
data = {
"is_silhouette" = 0;
url = "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-frc1/t5.0-1/xxxxxxxxx.jpg";
};
};
username = xxxxxxxxx;
Vous pouvez simplement laisser le paramètre à l'image et au nom d'utilisateur et exclure les autres en fonction de vos besoins. HTH.
Voici le code pour Facebook SDK 4 et Swift:
if FBSDKAccessToken.currentAccessToken() != nil {
FBSDKGraphRequest(graphPath: "me", parameters: nil).startWithCompletionHandler({ (connection, result, error) -> Void in
println("This logged in user: \(result)")
if error == nil{
if let dict = result as? Dictionary<String, AnyObject>{
println("This is dictionary of user infor getting from facebook:")
println(dict)
}
}
})
}
MISE À JOUR DES RÉPONSES AUX QUESTIONS:
Pour télécharger l'image du profil public, vous obtenez l'identifiant Facebook dans le dictionnaire:
let facebookID:NSString = dict["id"] as AnyObject? as NSString
Ensuite, appelez une demande de représentation graphique de l'API pour l'image de profil à l'aide de l'ID Facebook:
let pictureURL = "https://graph.facebook.com/\(fbUserId)/picture?type=large&return_ssl_resources=1"
Exemple de code:
let pictureURL = "https://graph.facebook.com/\(fbUserId)/picture?type=large&return_ssl_resources=1"
//
var URLRequest = NSURL(string: pictureURL)
var URLRequestNeeded = NSURLRequest(URL: URLRequest!)
println(pictureURL)
NSURLConnection.sendAsynchronousRequest(URLRequestNeeded, queue: NSOperationQueue.mainQueue(), completionHandler: {(response: NSURLResponse!,data: NSData!, error: NSError!) -> Void in
if error == nil {
//data is the data of profile image you need. Just create UIImage from it
}
else {
println("Error: \(error)")
}
})
En fait, utiliser " http://graph.facebook.com/ /picture? Type = small" pour récupérer l'image de profil de l'utilisateur ou même de ses amis est lent.
Une façon meilleure et plus rapide de le faire pour ajouter un objet FBProfilePictureView à votre vue et dans sa propriété profileID, attribuez l'ID Facebook de l'utilisateur.
Par exemple: FBProfilePictureView * friendsPic;
friendsPic.profileID = @ "1379925668972042";
Découvrez cette lib: https://github.com/jonasman/JNSocialDownload
vous pouvez même obtenir Twitter