Я не уверен, какая часть не работает для вас, так как вы публикуете и получаете ID обратно, но вот что я сделал быстро и грязно, на случай, если кто-то доберется сюда через Google.
Это функция HTTP POST, и двоичные данные файла увеличиваются как mime-часть.
Я большой поклонник доступной библиотеки ASIHTTPRequest здесь .
** ОБНОВЛЕНИЕ: 22.10.2012 ** - AFNetworking заменил ASIHTTPRequest в моем коде в последние несколько месяцев. Доступно на GitHub здесь
Документы в Facebook сбивают с толку, отчасти потому, что они неполные, а отчасти потому, что они могут ошибаться. Вы, вероятно, порвете волосы, выяснив, какое именно значение поста установить для заголовка или чего-то еще, но этот рецепт помещает фотографию в альбом, и это входит в канал.
Вам все еще нужно настроить OAuth в Facebook обычным способом - я сделал это в делегате приложения, поэтому я взял оттуда объект Facebook, чтобы получить свой токен доступа. Я удостоверился, что запросил разрешение «publish_stream» при аутентификации, например:
[facebook authorize:[NSArray arrayWithObjects:@"publish_stream", nil] delegate:self];
Это создаст или добавит в альбом под названием «Фото YOUR_APP_NAME» и появится в ленте пользователя. Вы можете поместить его в любой альбом, включая альбом «Стена», получив идентификатор этого альбома и изменив URL на http://graph.facebook.com/THE_ID_OF_THE_ALBUM/photos.
Вот основной метод:
-(void) postImageToFB:(UIImage *) image
{
NSData* imageData = UIImageJPEGRepresentation(image, 90);
Facebook* fb = [(uploadPicAppDelegate *)[[UIApplication sharedApplication] delegate] facebook ];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"https://graph.facebook.com/me/photos"]];
[request addPostValue:[fb accessToken] forKey:@"access_token"];
[request addPostValue:@"image message" forKey:@"message"];
[request addData:imageData forKey:@"source"];
[request setDelegate:self];
[request startAsynchronous];
}
Использование предоставленной Facebook библиотеки iOS выглядит следующим образом:
-(void) postImageToFB:(UIImage *) image
{
NSData* imageData = UIImageJPEGRepresentation(image, 90);
Facebook* fb = [(uploadPicAppDelegate *)[[UIApplication sharedApplication] delegate] facebook ];
NSMutableDictionary * params = [NSMutableDictionary dictionaryWithObjectsAndKeys:[fb accessToken],@"access_token",
@"message text", @"message",
imageData, @"source",
nil];
[fb requestWithGraphPath:@"me/photos"
andParams:params
andHttpMethod:@"POST"
andDelegate:self];
}