2012-01-05 13 views
14

Sto riscontrando qualche problema nel tentativo di caricare l'SDK di Facebook per caricare le foto. Attualmente posso caricarli uno per uno, ma vorrei raggruppare le richieste se possibile. Ho letto questo post over and over insieme allo fb batch docs. Ecco cosa ho finora.Caricamento foto batch di Facebook 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]; 

sto mappando i imageData alla chiave si sta cercando, ma ottengo questa risposta ogni volta.

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

Qualsiasi aiuto è molto apprezzato.

risposta

1

Con il new Facebook SDK (3.0) provare qualcosa di simile:

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

Hai provato utilizzando il framework sociale per iOS 6 per condividere foto? Ti permette di aggiungere tutte le foto e condividerle.

- (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

ogni immagine è stata condivisa da post a parte. è possibile condividere come singolo post con più immagini? – venky

0

Ecco la funzione che ho utilizzato in uno dei nostro progetto da parte di 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]; 
             }]; 


     }]; 
    } 
} 

}

2

prova con questo.

Si prega di notare che Facebook limitare il numero di richieste che può essere in un lotto di 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

è obbligatorio passare l'albumID ??? –

+0

Grazie funziona perfettamente .. –

+0

@Madhuri cosa intendi "albumId" ?. Ho solo immagini di percorsi locali. Non da alcun server locale. –

Problemi correlati