2012-01-05 14 views
14

Mam problemy z pobieraniem pakietu SDK serwisu Facebook iOS, aby zbiorczo przesyłać zdjęcia. Obecnie mogę przesłać je jeden po drugim, ale jeśli to możliwe, chciałbym grupować żądania. Przeczytałem ten post over and over wraz z fb batch docs. Oto, co mam do tej pory.Przesyłanie zdjęć za pomocą usługi 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]; 

Mapuję dane obrazu do klucza, którego szukam, ale otrzymuję tę odpowiedź za każdym razem.

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

Każda pomoc jest bardzo doceniana.

Odpowiedz

1

Z new Facebook SDK (3.0) spróbować czegoś takiego:

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

Czy próbowałeś za pomocą ramy Społecznej dla iOS 6 do udostępniania zdjęć? Pozwala dodawać wszystkie zdjęcia i udostępniać je.

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

każdy obraz został udostępnionego jako oddzielny post. czy można udostępniać jako pojedynczy post z wieloma obrazami? – venky

0

Co zrobić, jeśli chcesz ustawić kolejność wszystkich żądań przesyłania, korzystając z numeru NSOperationQueue?

0

Oto funkcja Użyłem jednego z naszego projektu przez 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

Spróbuj z tym.

Proszę zauważyć, że Facebook ograniczyć liczbę wniosków, które mogą być w partii do 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

jest obowiązkowe przekazać album ID ??? –

+0

Dzięki to działa idealnie .. –

+0

@Madhuri co masz na myśli "albumId" ?. Mam tylko obrazy lokalnych ścieżek. Nie z żadnego lokalnego serwera. –

Powiązane problemy