2016-04-12 3 views
1

У меня есть 2 способа обмена изображениями в Facebook.Загрузите несколько изображений в facebook с помощью SLRequest

В SDK Way (работа идеально):

FBSDKSharePhotoContent *content = [[FBSDKSharePhotoContent alloc] init]; 

    NSMutableArray *uploadImages = [[NSMutableArray alloc] init]; 
    for (UIImage *image in images) { 
     FBSDKSharePhoto *sharePhoto = [[FBSDKSharePhoto alloc] init]; 
     sharePhoto.caption = title; 
     sharePhoto.image = image; 

     [uploadImages addObject:sharePhoto]; 
    } 
    content.photos = [NSArray arrayWithArray:uploadImages]; 

    [FBSDKShareAPI shareWithContent:content delegate:self]; 

и SLRequest путь (только отправить 1 изображение):

+ (void)uploadPhotoToFacebook:(NSMutableArray *)imagesData imageTitle:(NSString *)title account:(ACAccount*)account completionBlock:(shareSocialResponse)completion 
{ 
    SLRequest *facebookRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook 
                requestMethod:SLRequestMethodPOST 
                   URL:[NSURL URLWithString:@"https://graph.facebook.com/me/photos"] 
                 parameters:@{@"message": title}]; 

    for (NSData *imageData in imagesData) { 
     [facebookRequest addMultipartData:imageData 
           withName:@"source" 
            type:@"multipart/form-data" 
           filename:@"photo!"]; 
    } 
    NSLog(@"facebookRequest %@",facebookRequest); 
    facebookRequest.account = account; 
    [facebookRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) 
    { 
     if (error) { 
      NSLog(@"%@",error.description); 

     } else { 
      NSDictionary *returnedData = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:&error]; 
      NSLog(@"returnedData: %@", [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]); 

      if ([urlResponse statusCode] != 200) { 

       dispatch_async(dispatch_get_main_queue(), ^{ 
        NSString *errorMessage = @"We could not process your request now"; 
        if ([returnedData valueForKeyPath:@"error.message"] != nil) { 
         errorMessage = [returnedData valueForKeyPath:@"error.message"]; 
        } 
        completion(NO, errorMessage); 
       }); 
      } else { 
       completion(YES, @"Your clip was posted!"); 
      } 
     } 
    }]; 
} 

Я считал, что если каждый из данных, переданных в многоголосных может работать , но нет.

У кого-нибудь есть идеи, как это сделать? Благодарю.

ответ

1

В документах facebook есть статья, которая может вам помочь.

https://developers.facebook.com/docs/graph-api/making-multiple-requests

Таким образом, в вашем случае вам нужно будет отправить поле, называемое batch в вашем запросе, и каждый файл должен быть присоединен с уникальным именем, поэтому он не будет переписывать другой.

Содержание batch поля будет в JSON, в котором будет указать конечную точку вашего запроса, что-то вроде этого (уменьшенная кстати):

[ 
    { 
    "method": "POST", 
    "relative_url": "me/photos", 
    "body": "message=labrys", 
    "attached_files": "file1" 
    }, 
    { 
    "method": "POST", 
    "relative_url": "me/photos", 
    "body": "message=circle", 
    "attached_files": "file2" 
    } 
] 

Я попробовал его с почтальоном, настройки для этого запроса должен выглядеть следующим образом:

image

Извините за не размещение кода, я не разбираюсь в объективном C, но я надеюсь, что вы получите представление об этом.

+0

Спасибо человеку. Прекрасно работает – jose920405