0

toblerpwn answerを使用して、希望どおりに写真をアプリケーションアルバムに公開できました。ただし、これはアプリケーション アルバムが既に作成されている場合にのみ機能します (アルバム ID を指定する必要があるため)。

一方、requestForUploadPhoto 簡易メソッドは、アプリケーション アルバムが存在しない場合は作成し、写真を公開します。

誰かがこの2つの動作をマージする方法を理解するのを手伝ってくれますか?

4

1 に答える 1

1

@deepak-lakshmanan のおかげで、問題を解決できました。

/USER_ID/photosアイデアは、 insted ofを使用してアプリケーションアルバムに公開することです/ALBUM_ID/photos; このようにして、アルバムが存在しない場合は自動的に作成されます。

したがって、従うべき手順は次のとおりです。

  • 公開許可を得る
  • 次に、を使用してユーザーIDを取得します/me
  • 最後に、写真をアプリケーションアルバムに公開します/USER_ID/photos

Facebook SDK 3.1 for iOS を使用している場合に備えて、誰かがこれに苦労した場合のコードを次に示します。

- (void)sendRequestFacebookPublishPermission {
    NSArray *permissions = [[NSArray alloc] initWithObjects:@"publish_stream", nil];
    if(!FBSession.activeSession.isOpen ) {
        [FBSession openActiveSessionWithPublishPermissions:permissions
                                           defaultAudience:FBSessionDefaultAudienceFriends
                                              allowLoginUI:YES
                                         completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
                                             [self requestFacebookPublishPermissionCompleted:session status:status error:error];
                                         }];
    } else if ([FBSession.activeSession.permissions indexOfObject:@"publish_actions"] == NSNotFound) {
        [FBSession.activeSession reauthorizeWithPublishPermissions:permissions
                                                   defaultAudience:FBSessionDefaultAudienceFriends
                                                 completionHandler:^(FBSession *session, NSError *error) {
                                                     [self requestFacebookPublishPermissionCompleted:session status:FBSessionStateOpen error:error];
                                                 }];
    } else {
        [self sendRequesFacebooktUserInfo];
    }
}

- (void)requestFacebookPublishPermissionCompleted:(FBSession *)session
                                            status:(FBSessionState)status
                                             error:(NSError *)error {
    if (error) {
        DLog(@"%@", error.localizedDescription);
    } else {
        [self sendRequesFacebooktUserInfo];
    }
}

-(void)sendRequesFacebooktUserInfo {
    FBRequestConnection *newConnection = [[FBRequestConnection alloc] init];

     // output the results of the request
    FBRequestHandler handler = ^(FBRequestConnection *connection, id result, NSError *error) {
        [self requestFacebookUserInfoCompleted:connection result:result error:error];
    };

    // create the request object, using the fbid as the graph path
    FBRequest *request = [[FBRequest alloc] initWithSession:FBSession.activeSession graphPath:@"me"];

    // add the request to the connection object
    [newConnection addRequest:request completionHandler:handler];

    // if there's an outstanding connection, just cancel
    [self.requestConnection cancel];

    // keep track of our connection, and start it
    self.requestConnection = newConnection;
    [newConnection start];
}

- (void)requestFacebookUserInfoCompleted:(FBRequestConnection *)connection
                                result:(id)result
                                 error:(NSError *)error {
    // not the completion we were looking for...
    if (self.requestConnection && connection != self.requestConnection) {
        return;
    }

    // clean this up, for posterity
    self.requestConnection = nil;

    if (error) {
        DLog(@"%@", error.localizedDescription);
    } else {
        FBGraphObject *dictionary = (FBGraphObject *)result;
        NSString* userId = (NSString *)[dictionary objectForKey:@"id"];
        [self sendRequestFacebookPublishOnAlbum:userId];
    }
}

- (void)sendRequestFacebookPublishOnAlbum:(NSString*)fbId {
    UIImage *imageToPost = /* get the image you need*/ ;

    /*
    //--- Facebook SDK convenience method : requestForUploadPhoto won't let me post image description ---//
    FBRequestConnection *newConnection = [FBRequestConnection startForUploadPhoto:screenshot completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
        [self requestPostCardOnFacebookCompleted:connection result:result error:error];
    }];

    // if there's an outstanding connection, just cancel
    [self.requestConnection cancel];

    // keep track of our connection, and start it
    self.requestConnection = newConnection;
    //-----------------------------------------------------------------------------------------------------//
     */


    //--- http://stackoverflow.com/questions/12486852/facebook-ios-sdk-cannot-specify-an-album-using-fbrequests-requestforuploadphot ---//
    NSString *messagePublie = laCarte.message;
    NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys:
                                screenshot, @"picture",
                                messagePublie , @"name",
                                nil] ;

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

    FBRequestHandler handler = ^(FBRequestConnection *connection, id result, NSError *error) {
        [self requestFacebookPublishOnAlbumCompleted:connection result:result error:error];
    };

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

    FBRequest *request = [[FBRequest alloc] initWithSession:FBSession.activeSession graphPath:graphPath parameters:parameters HTTPMethod:@"POST"];
    [newConnection addRequest:request completionHandler:handler];

    // if there's an outstanding connection, just cancel
    [self.requestConnection cancel];

    // keep track of our connection, and start it
    self.requestConnection = newConnection;
    [newConnection start];
}

- (void)requestFacebookPublishOnAlbumCompleted:(FBRequestConnection *)connection result:(id)result error:(NSError *)error {
    if (self.requestConnection && connection != self.requestConnection) {
        return;
    }

    // clean this up, for posterity
    self.requestConnection = nil;

    if (error) {
        DLog(@"%@", error.localizedDescription);
    } else {
        DLog(@"%@", "Done");
    }
}
于 2012-11-27T11:40:00.473 に答える