在应用程序相册中使用Facebook SDK 3.1 for iOS发布带有标题的图片

使用toblerpwn答案我pipe理发布图片到应用程序相册,我想。 但是,这只有当应用程序相册已经被创build(因为我需要指定相册ID)的作品。

另一方面,requestForUploadPhoto方便的方法创build应用程序相册,如果它不存在并发布图片。

那么有人能帮我弄清楚如何合并这两个天体吗?

感谢@ deepak-lakshmanan我设法解决我的问题。

这个想法是使用/USER_ID/photos /ALBUM_ID/photos发布到应用程序相册; 这样,如果相册不存在,这个专辑就会自动创build。

所以要遵循的步骤是:

  • 获得发布权限
  • 然后使用/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"); } }