web-dev-qa-db-fra.com

Obtenir le nom d'utilisateur et la photo de profil de Facebook iOS 7

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.

34
Le'Kirdok

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:

  • type: petit, normal, grand, carré
  • largeur: <valeur>
  • hauteur: <valeur>
    • Utilisez à la fois largeur et hauteur pour obtenir une image recadrée de remplissage d'aspect
80
Guilherme
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];
        }
    }];
}
38
Hemanshu Liya

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.

6
Victor M

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.

5
akdsouza

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)")
        }
    })
1
grandagile

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

0
Hashim Akhtar

Découvrez cette lib: https://github.com/jonasman/JNSocialDownload

vous pouvez même obtenir Twitter

0
João Nunes