toblerpwn answerを使用して、希望どおりに写真をアプリケーションアルバムに公開できました。ただし、これはアプリケーション アルバムが既に作成されている場合にのみ機能します (アルバム ID を指定する必要があるため)。
一方、requestForUploadPhoto 簡易メソッドは、アプリケーション アルバムが存在しない場合は作成し、写真を公開します。
誰かがこの2つの動作をマージする方法を理解するのを手伝ってくれますか?
toblerpwn answerを使用して、希望どおりに写真をアプリケーションアルバムに公開できました。ただし、これはアプリケーション アルバムが既に作成されている場合にのみ機能します (アルバム ID を指定する必要があるため)。
一方、requestForUploadPhoto 簡易メソッドは、アプリケーション アルバムが存在しない場合は作成し、写真を公開します。
誰かがこの2つの動作をマージする方法を理解するのを手伝ってくれますか?
@deepak-lakshmanan のおかげで、問題を解決できました。
/USER_ID/photos
アイデアは、 insted ofを使用してアプリケーションアルバムに公開することです/ALBUM_ID/photos
; このようにして、アルバムが存在しない場合は自動的に作成されます。
したがって、従うべき手順は次のとおりです。
/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");
}
}