Facebook iOS SDK: Не може да се посочи албум с помощта на requestForUploadPhoto на FBRequest:

Имам местна снимка в моето приложение за iPhone и искам да я кача в конкретен албум във Facebook, посветен на моето приложение.

Проблем: Името на приложението ми завършва с думата „Снимки“, така че албумът във Facebook по подразбиране е APP_NAME Photos Photos – очевидно проблем.

Цел: Искам да създам нов албум, да съхраня идентификатора му в NSUserDefaults и (след известна проверка по време на изпълнение) да го използвам за всички бъдещи снимки, които се качват от приложението.

Къде съм: Мога да направя новия албум чрез Open Graph, като използвам желаното от мен име и описание, и мога да извлека неговия идентификатор. Също така мога да качвам снимки достатъчно лесно. Това, което обаче НЕ МОГА да разбера, е как да посоча къде завършва тази качена снимка!

Код: Ето моят код за качване на снимки с някои коментирани резултати. Предполагам, че тук е проблемът ми, тъй като създаването на албум и т.н. работи перфектно.

- (void)postPhotosToFacebook:(NSArray *)photos withAlbumID:(NSString *)albumID {

    // Just testing with one image for now; I'll get in to multiple later..
    UIImage *image = [photos lastObject];

    FBRequest *imageUploadRequest = [FBRequest requestForUploadPhoto:image];

    // CALL OUT: I'm guessing my problem is here - but I just don't know!
    [[imageUploadRequest parameters] setValue:albumID
                                       forKey:@"album"];

    DebugLog(@"imageUploadRequest parameters: %@",[imageUploadRequest parameters]);

    // Results of DebugLog:
    // imageUploadRequest parameters: {
    //     album = 10151057144449632;
    //     picture = "<UIImage: 0xc6b6920>";
    // }
    // The album data returns correctly using FB's Graph API explorer tool,
    // so I know it's a legit album.
    // https://developers.facebook.com/tools/explorer

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

    [connection addRequest:imageUploadRequest
         completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {

             if (!error) {

                 DebugLog(@"Photo uploaded successfuly! %@",result);

                 // Results of DebugLog:
                 // 
                 // Photo uploaded successfuly! {
                 //     id = 10151057147399632;
                 //     "post_id" = "511304631_10151057094374632";
                 // }
                 // Again, the photo at that ID shows up correctly, etc -
                 // BUT it's in the wrong album! It shows up in the default app album.

             } else {

                 DebugLog(@"Photo uploaded failed :( %@",error.userInfo);
             }

         }];

    [connection start];

}

Предполагания: Предполагам, че проблемът ми е някъде в начина, по който присвоявам параметъра за ID на албума си към заявката за изображение.. но нямам представа.

Можете да видите на този URL адрес, че това трябва да е възможно..


person toblerpwn    schedule 19.09.2012    source източник


Отговори (1)


Ааа СЛАДКО. Разбрах това с малко добро старомодно, направо бърникане.

Като се има предвид, че няма истинска инструкция как да се приложи стойността „album“ към FBRequest, колебая се да го нарека грешка, но така или иначе имах нужда от различен метод - в този случай просто създаване на обща Open Graph HTTP заявка и попълване на цялата информация за изображението.

Няма истински недостатък на този подход; с изключение на това, че не можете да използвате метода за удобство requestForUploadPhoto:.

Ето моята реализация на правилния метод (премахнатият код е коментиран):

- (void)postPhotosToFacebook:(NSArray *)photos withAlbumID:(NSString *)albumID {

    UIImage *image = [photos lastObject];

//    FBRequest *imageUploadRequest = [FBRequest requestForUploadPhoto:image];
//    
//    [[imageUploadRequest parameters] setValue:albumID
//                                       forKey:@"album"];
//    
//    DebugLog(@"imageUploadRequest parameters: %@",[imageUploadRequest parameters]);

    NSString *graphPath = [NSString stringWithFormat:@"%@/photos",albumID];

    DebugLog(@"graphPath = %@",graphPath);

    NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys:
                                image,@"picture",
                                nil];

    FBRequest *request = [FBRequest requestWithGraphPath:graphPath
                                              parameters:parameters
                                              HTTPMethod:@"POST"];

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

    [connection addRequest:request
         completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {

             if (!error) {

                 DebugLog(@"Photo uploaded successfuly! %@",result);

             } else {

                 DebugLog(@"Photo uploaded failed :( %@",error.userInfo);
             }

         }];

    [connection start];

}
person toblerpwn    schedule 19.09.2012
comment
Благодаря, имах проблеми с това, когато мигрирах към SDK 3.1. защото се опитвах да го накарам да работи с requestForUploadPhoto - person Kalem; 26.11.2012
comment
Господи, това ми спести толкова много време. Не разбирам защо Facebook не е включил това в техните уроци за API. Това, което направихте, е толкова просто и работи много добре. Благодаря! - person n.evermind; 27.11.2013
comment
Не мога да се съглася повече с горния коментар. Вчера прекарах цял ден в настройване на сложна настройка на opengraph и сценично изображение за SDK 3.13 и след това попаднах на вашия код. Twitter отне 10 минути, Facebook отне цял ден. Това трябва да ви каже нещо за техните програмисти. - person user3344977; 21.03.2014