2012-01-05 30 views
14

Tengo problemas para que el SDK de iOS de Facebook suba fotos por lotes. Actualmente puedo subirlos uno por uno, pero me gustaría agrupar los pedidos si es posible. He leído esto post over and over junto con fb batch docs. Esto es lo que tengo hasta ahora.Facebook Carga de fotos en lote 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]; 

Estoy mapeando imageData a la llave que está buscando, pero obtengo esta respuesta siempre.

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

Cualquier ayuda es muy apreciada.

Respuesta

1

Con la new Facebook SDK (3.0) intentar algo como esto:

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

¿Ha intentado utilizar el marco social para iOS 6 para compartir fotos? Te permite agregar todas las fotos y compartirlas.

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

cada imagen fue compartida como post aparte. ¿es posible compartir como publicación única con imagen múltiple? – venky

0

Aquí es la función que he utilizado en uno de nuestro proyecto por parte de 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

intento con esto.

Tenga en cuenta que Facebook limita el número de solicitudes que puede estar en un lote a 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

es obligatorio pasar el álbumID ??? –

+0

Gracias funciona a la perfección. –

+0

@Madhuri ¿a qué te refieres con "álbum Id"? Solo tengo imágenes de ruta locales. No desde ningún servidor local. –

Cuestiones relacionadas