Facebook iOS SDK: невозможно указать альбом с помощью запроса FBRequestForUploadPhoto:

У меня есть локальная фотография в приложении для 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];

}

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

Вы можете увидеть на этот URL, что это должно быть возможно..


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


Ответы (1)


Ах СЛАДКИЙ. Я понял это с некоторыми старыми добрыми, прямыми вознями.

Учитывая, что нет реальной инструкции о том, как применить значение «альбом» к FBRequest, я не решаюсь назвать это ошибкой, но в любом случае мне нужен был другой метод — в этом случае просто создание общего HTTP-запроса Open Graph и заполнение всей информации об изображении.

У этого подхода нет реальных недостатков; за исключением того, что вы не можете использовать метод удобства 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, а затем наткнулся на ваш код. Твиттер занял 10 минут, Фейсбук — целый день. Это должно рассказать вам кое-что об их программистах. - person user3344977; 21.03.2014