Вопрос по facebook-graph-api, ios, objective-c, facebook – Получение имени пользователя и изображения профиля из Facebook iOS 7

34

Я прочитал много уроков по получению информации из Facebook, но до сих пор потерпел неудачу. Я просто хочу получить имя пользователя и фотографию в 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 *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;
       }

   } ];


 }

Я использовал этот код для получения информации, но не могу получить какую-либо информацию. Можете ли вы помочь мне об этом? Или вы можете предпочесть учебник, чтобы прочитать его? Я прочитал учебники на developer.facebook.com.

Спасибо за Ваш интерес.

Ваш Ответ

7   ответов
38
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];
        }
    }];
}
Работает с новым Facebook SDK v2.3 Hemanshu Liya
Спасибо, это сработало для последней SDK facebook. Ashok Kumar S
Вместо[[NSURL alloc] initWithURL: imageStringOfLoginUser]; должно быть[[NSURL alloc] initWithString: imageStringOfLoginUser]; или прощеNSURL *url = [NSURL URLWithString:imageStringOfLoginUser]; rafalkitta
Спасибо, ниже ссылка на документацию Facebook:developers.facebook.com/docs/ios/graph#fetching Hamza
80

которым янашел, чтобы получить пользователяфотография профиля.

[[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]];
    }
  }];
</fbgraphuser>

Другие параметры запроса, которые можно использовать:

тип: маленький, нормальный, большой, квадратныйширина: < значение>высота: < значение>Используйте обаширина а такжерост получить обрезанное изображение
Спасибо Гильерме! Действительно самый простой способ сделать это. Hashim Akhtar
Очень чистый. Хороший ответ! inorganik
@ О, хорошая мысль. Использование идентификатора пользователя должно работать в любом случае. Буду редактировать мой пост. Guilherme
Я думаю, что я сделал :). Я получил appID от Facebook и написал в файл .plist. Этого достаточно, или мне нужно сначала войти в систему, прежде чем извлекать информацию? Le'Kirdok
0

https://github.com/jonasman/JNSocialDownload

вы даже можете получить твиттер

6

/me?fields=name,picture.width(720).height(720){url}

И вы получите действительно большое и классное изображение профиля:

{
  "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"
    }
  }
}

Постскриптум/me?fields=picture.type(large) Безразлично»сделай это для меня.

1

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)
            }
        }
    })
}
</string,>

ОБНОВЛЕНИЕ ОТВЕТИТЬ НА ВОПРОСЫ:

Чтобы загрузить общедоступное изображение профиля, вы получаете идентификатор Facebook из словаря:

let facebookID:NSString = dict["id"] as AnyObject? as NSString

А затем вызвать запрос к API графика для изображения профиля, используя идентификатор Facebook:

let pictureURL = "https://graph.facebook.com/\(fbUserId)/picture?type=large&return_ssl_resources=1"

Образец кода:

    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)")
        }
    })
На самом деле я нашел лучший способ, вы можете создатьтолковый словарь с ключомполя» и значение "id, email, first_name, ..., picture.type (large) "-> затем передайте это в параметрах (вместо nil) -> затем вы'Я получу информацию об изображении вместе со всем остальным. Islam Q.
Как насчет аватарки? Islam Q.
@IslamQ. где ты нашел эту информацию? Я хотел бы знать, что еще я могу добавить в "поля». Damasio
5

[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 resu,lt, 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;

Вы можете просто оставить параметр для изображения имя пользователя и исключить другие на основе вашего требования. НТН.

Спасибо! гораздо проще, чем сделать 2 запроса Lena Bru
0

http://graph.facebook.com// Тип изображения? = Маленький» Получить изображение профиля пользователя или даже его друзей идет медленно.

Лучший и более быстрый способ сделать это, чтобы добавить объект FBProfilePictureView в ваше представление и в негоs свойство profileID, назначить пользователяс Facebook идентификатор.

Например: FBProfilePictureView * friendsPic;

friendsPic.profileID = @ "1379925668972042" ;

Похожие вопросы