I have 2 ways for share images to Facebook.
The SDK Way (work perfect):
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];
and SLRequest way (only send 1 image):
+ (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!");
}
}
}];
}
I believed that if each data sent in a multipart might work, but no.
Anyone have any idea how to do it? Thanks.
There is some article in the facebook docs that might help you.
https://developers.facebook.com/docs/graph-api/making-multiple-requests
So, in your case you will need to send a field called batch
in your request and each file must be attached with a unique name so it won't be rewrite by another.
The content of batch
field will be a json in which you will specify the endpoint of your request, something like this(minified btw):
[
{
"method": "POST",
"relative_url": "me/photos",
"body": "message=labrys",
"attached_files": "file1"
},
{
"method": "POST",
"relative_url": "me/photos",
"body": "message=circle",
"attached_files": "file2"
}
]
I tried it with postman, the settings for that request should look like this:
Sorry for not posting code, I'm not versed in objective C but I hope you get the idea of this.