6

iPhoneアプリにローカル写真があり、それを自分のアプリ専用のFacebookの特定のアルバムにアップロードしたいと思います。

問題:私のアプリ名は「写真」という単語で終わっているので、デフォルトのFacebookアルバムはAPP_NAME Photos Photos-明らかに問題です。

目標:新しいアルバムを作成し、そのIDをに保存しNSUserDefaults、(実行時に検証した後)アプリからアップロードされる今後のすべての写真に使用したいと考えています。

現在の場所:希望の名前と説明を使用して、Open Graphを介して新しいアルバムを作成し、そのIDを取得できます。写真も簡単にアップロードできます。しかし、私が理解できないのは、アップロードされた写真がどこに到達するかを指定する方法です!

コード:これが私の写真アップロードコードで、いくつかの結果がコメントされています。アルバムの作成などが完全に機能しているので、これが私の問題であると思います。

- (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で、これが可能であることがわかります。

4

1 に答える 1

6

ああスウィート。私はこれを古き良き、まっすぐにいじくり回して理解しました。

'album'値をFBRequestに適用する方法についての実際の指示がないことを考えると、それをバグと呼ぶことを躊躇しますが、どちらの方法でも別のメソッドが必要でした-この場合、単に一般的なOpenGraphHTTPリクエストを作成してすべての画像情報を入力します。

このアプローチには本当の欠点はありません。ただし、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];

}
于 2012-09-19T00:23:20.000 に答える