2012-01-05 27 views
14

Fotoğrafları toplu olarak yüklemek için Facebook iOS SDK'sini almaya çalışırken bazı sıkıntı çekiyorum. Şu anda bunları tek tek yükleyebilirim, ancak mümkünse istekleri toplu olarak göndermek istiyorum. Bu 'u fb batch docs ile birlikte okudum. Şimdiye dek sahip olduğum şey bu.Facebook Batch Photo Upload iOS

Facebook *facebook = [(AppDelegate*)[[UIApplication sharedApplication] delegate] facebook]; 

     NSData *imageData = UIImagePNGRepresentation([imgs objectAtIndex:0]); 
    NSString *jsonRequest1 = [NSString stringWithFormat:@"{ \"method\": \"POST\", \"relative_url\": \"me/photos\", \"attached_files\": \"file1\" }"]; 
     NSString *jsonRequest2 = [NSString stringWithFormat:@"{ \"method\": \"POST\", \"relative_url\": \"me/photos\", \"attached_files\": \"file2\" }"]; 
     NSString *jsonRequestsArray = [NSString stringWithFormat:@"[ %@, %@ ]", jsonRequest1, jsonRequest2]; 


    NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:jsonRequestsArray,@"batch",imageData,@"file1",imageData,@"file2" nil]; 

Ben aradığı anahtarına imageData haritalama, ama ben bu yanıtı her zaman.

{ 
     body = "{\"error\":{\"message\":\"File batch has not been attached\",\"type\":\"GraphBatchException\"}}"; 
     code = 400; 
     headers =   (
         { 
       name = "WWW-Authenticate"; 
       value = "OAuth \"Facebook Platform\" \"invalid_request\" \"File batch has not been attached\""; 
      }, 
         { 
       name = "HTTP/1.1"; 
       value = "400 Bad Request"; 
      }, 
         { 
       name = "Cache-Control"; 
       value = "no-store"; 
      }, 
         { 
       name = "Content-Type"; 
       value = "text/javascript; charset=UTF-8"; 
      } 
     ); 
    }, 
     { 
     body = "{\"error\":{\"message\":\"File file2 has not been attached\",\"type\":\"GraphBatchException\"}}"; 
     code = 400; 
     headers =   (
         { 
       name = "WWW-Authenticate"; 
       value = "OAuth \"Facebook Platform\" \"invalid_request\" \"File file2 has not been attached\""; 
      }, 
         { 
       name = "HTTP/1.1"; 
       value = "400 Bad Request"; 
      }, 
         { 
       name = "Cache-Control"; 
       value = "no-store"; 
      }, 
         { 
       name = "Content-Type"; 
       value = "text/javascript; charset=UTF-8"; 
      } 
     ); 
    } 
) 

Herhangi bir yardım çok takdir edilmektedir. new Facebook SDK (3.0) ile

cevap

1

böyle bir şey deneyin:

FBRequestConnection *connection = [[FBRequestConnection alloc] init]; 

FBRequest *request1 = [FBRequest requestForUploadPhoto:image1]; 
[connection addRequest:request1 
    completionHandler: 
^(FBRequestConnection *connection, id result, NSError *error) { 
    //handle error/success 
} 
]; 

FBRequest *request2 = [FBRequest requestForUploadPhoto:image2]; 
[connection addRequest:request2 
    completionHandler: 
^(FBRequestConnection *connection, id result, NSError *error) { 
    //handle error/success 
} 
]; 

[connection start]; 
2

Fotoğraf paylaşmak amacıyla iOS 6 için Sosyal çerçeve kullanmayı denediniz mi? Tüm fotoğrafları eklemenizi ve paylaşmanızı sağlar.

- (IBAction)postToFacebook:(id)sender { 
    if([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) { 

     SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook]; 

     [controller setInitialText:@"First post from my iPhone app"]; 
     [controller addURL:[NSURL URLWithString:@"http://www.jinibot.com"]]; 
     [controller addImage:[UIImage imageNamed:@"socialsharing-facebook-image.jpg"]]; 

     //add as many images as you want 
     [controller addImage:[UIImage imageNamed:@"socialsharing-facebook-image.jpg"]]; 
     [controller addImage:[UIImage imageNamed:@"socialsharing-facebook-image.jpg"]]; 
     [controller addImage:[UIImage imageNamed:@"socialsharing-facebook-image.jpg"]]; 

     [self presentViewController:controller animated:YES completion:Nil]; 
    } 
} 
+0

bir toplu olabilir istek sayısını sınırlamak lütfen unutmayın. Birden çok görüntü ile tek gönderi olarak paylaşılabilir mi? – venky

2

bununla deneyin ben Facebook SDK 3.x

-(void)postOnFacebookWall : (id)response{ 

    NSString *strPost = [NSString stringWithFormat:@"Group Name:%@",[[response valueForKey:@"GroupDetail"] valueForKey:@"group_name"]]; 
    NSString *strUrl = [NSString stringWithFormat:@"%@",[[response valueForKey:@"GroupDetail"] valueForKey:@"group_picture_path"]]; 
    NSURL *urlToShare = [NSURL URLWithString:strUrl]; 
    UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:urlToShare]]; 

    FBAppCall *appCall = [FBDialogs presentShareDialogWithLink:urlToShare 
                 name:@"Heook" 
                caption:@"string" 
               description:@"The 'Has." 
                picture:urlToShare 
               clientState:nil 
                handler:^(FBAppCall *call, NSDictionary *results, NSError *error) { 
                 if (error) { 
                  NSLog(@"Error: %@", error.description); 
                 } else { 
                  NSLog(@"Success!"); 
                 } 
                }]; 

    if (!appCall) { 
     // Next try to post using Facebook's iOS6 integration 
     BOOL displayedNativeDialog = [FBDialogs presentOSIntegratedShareDialogModallyFrom:self 
                      initialText:strPost 
                       image:image 
                        url:nil 
                       handler:nil]; 

     if (!displayedNativeDialog) { 
      [self performPublishAction:^{ 
      //    NSString *message = [NSString stringWithFormat:@"Group Name:%@\nGroup Image:%@\n",[[response valueForKey:@"GroupDetail"] valueForKey:@"group_name"],[[response valueForKey:@"GroupDetail"] valueForKey:@"group_picture_path"]]; 

      [FBRequestConnection startForPostStatusUpdate:strPost 
             completionHandler:^(FBRequestConnection *connection, id result, NSError *error) { 

              [self showAlert:@"Group shared on facebook" result:result error:error]; 
             }]; 


     }]; 
    } 
} 

} tarafından projemizin birinde kullanmış fonksiyonudur.

Facebook her resim ayrı bir yayın olarak paylaşıldı 50

-(void)uploadBulkPhotosToAlbum:(NSArray *)photoArray albumId:(NSString *)albumId 

    FBRequestConnection *connection = [[FBRequestConnection alloc] init]; 
    NSString *graphPath = [NSString stringWithFormat:@"%@/photos",albumId]; 

    NSMutableString *jsonFormat = [[NSMutableString alloc] init]; 
    [jsonFormat setString:@"["]; 

    for (int i = 0; i < photoArray.count; i++) 
    { 
     if (i != 0) 
     { 
      [jsonFormat appendString:@","]; 
     } 

     NSString *fileName = [NSString stringWithFormat:@"file%d",i]; 
     NSString *jsonRequest = [NSString stringWithFormat:@"{ \"method\": \"POST\", \"relative_url\": \"%@\", \"attached_files\": \"%@\" }",graphPath,fileName]; 
     [jsonFormat appendString:[NSString stringWithFormat:@" %@",jsonRequest]]; 
    } 

    [jsonFormat appendString:@" ]"]; 

    NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:jsonFormat,@"batch",nil]; 


    for (int i = 0; i < photoArray.count; i++) 
    { 
     NSString *fileName = [NSString stringWithFormat:@"file%d",i]; 

     NSData *data = UIImagePNGRepresentation([photoArray objectAtIndex:i]); 
     [params setObject:data forKey:fileName]; 
    } 

    FBRequest *request = [FBRequest requestWithGraphPath:@"me" parameters:params HTTPMethod:@"POST"]; 
    [connection addRequest:request completionHandler:^(FBRequestConnection *connection, id result, NSError *error) { 
     if (!error) 
     { 
      [self resetViewAfterUpload:result]; 
     } 
     else 
     { 
      [MBProgressHUD hideHUDForView:self.navigationController.view animated:YES]; 
      NSLog(@"Photo uploaded failed :(%@",error.userInfo); 
      [[[UIAlertView alloc] initWithTitle:@"Error occurred!!" message:@"Some error occured while uploading." delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil] show]; 
     } 
    }]; 
    [connection start]; 
} 
+0

albümID iletmek için zorunludur ??? –

+0

Teşekkür ederim mükemmel çalışıyor .. –

+0

@Madhuri "albumId" ne demek istiyorsun? Sadece yerel yol resimlerim var. Herhangi bir yerel sunucudan değil. –