2014-10-28 61 views
1

我是一名iOS开发人员,目前我正在使用SLComposeViewController在Facebook/Twitter上共享帖子。我的问题是我必须在一个帖子中发布多个图像。在Facebook/Twitter上使用SLComposeViewController发布多个图像?

我已经这样做了如下:

SLComposeViewController* mySLComposerSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter]; 
[mySLComposerSheet setInitialText:textTobeShared]; 
mySLComposerSheet addURL:[NSURL URLWithString:@"http://click-labs.com/"]]; 
for(int count=0;count<imageArray.count;count++) 
     if([mySLComposerSheet addImage:[UIImage imageWithData:[imageArray objectAtIndex:count]]]) 

在上面的代码,imageArray是,我要发布图像阵列。

当我在Facebook上这样做时,所有图像都作为单独的帖子发布。

在Twitter的情况下,addImage方法仅返回第一张图像的真实,而在其他图像的情况下返回false。所以只发布一张图片。

所以我想知道如何实现我的目标,并且可以在单个推文中发布多个图像。

+0

在Twitter中,您只能发布每个推文一个图像。在Twitter上没有这样的专辑。 – 2014-10-28 10:46:26

+0

你确定没有办法在twitter中实现这一点。有没有关于这个问题的任何文件可用。 – Santosh 2014-10-28 10:49:20

+0

如果你是一个推特用户,那么你会知道这一点。每条推文(以其他词语发布)都会有一张关联的图片。 – 2014-10-28 11:27:13

回答

0

我认为你需要先创建一个专辑。

这是link to the facebook album API文档。

- (void)shareToFacebook { 
if (FBSession.activeSession.isOpen) { 
    NSLog(@"SESSION IS OPEN"); 

    [self createFacebookAlbum]; 
} else { 
    NSLog(@"SESSION IS NOT OPEN"); 
    NSArray* permissions = [NSArray arrayWithObject:@"email"]; 
    [FBSession openActiveSessionWithReadPermissions:permissions allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState state, NSError *error) { 
     [self sessionStateChanged:session state:state error:error]; 

     if (error) { 
      /* handle failure */ 
      NSLog(@"error:%@, %@", error, [error localizedDescription]); 
      UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"There was a problem with your Facebook permissions." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil]; 
      [alert show]; 
     } 
     else if (state == FBSessionStateClosed || state == FBSessionStateClosedLoginFailed) { 
      [FBSession.activeSession closeAndClearTokenInformation]; 
     } 
     else if (state == FBSessionStateOpenTokenExtended || state == FBSessionStateOpen) { 
      if(!self.presentedFacebookSheet) { 
       [self performSelector:@selector(reauthorizeAndContinuePostToFacebook) withObject:nil afterDelay:0.5]; 
       self.presentedFacebookSheet = YES; 
      } 
     } 
     }]; 
    } 
} 

- (void)reauthorizeAndContinuePostToFacebook { 
    NSArray *permissions = [NSArray arrayWithObjects:@"publish_actions", nil]; 

    [[FBSession activeSession] requestNewPublishPermissions:permissions defaultAudience:FBSessionDefaultAudienceFriends completionHandler:^(FBSession *session, NSError *error) { 
     [self shareToFacebook]; 
    }]; 
} 

- (void)createFacebookAlbum { 
    NSMutableDictionary* parameters = [NSMutableDictionary dictionary]; 
    [parameters setObject:@"Test name" forKey:@"name"]; 
    [parameters setObject:@"Test message" forKey:@"message"]; 

    FBRequest* request = [FBRequest requestWithGraphPath:@"me/albums" parameters:parameters HTTPMethod:@"POST"]; 

    NSLog(@"creating facebook album"); 
    FBRequestConnection *connection = [[FBRequestConnection alloc] init]; 
    [connection addRequest:request 
     completionHandler:^(FBRequestConnection *connection, id result, NSError *error) { 
      if (!error) { 
       NSString* albumId = [result objectForKey:@"id"]; 
       NSLog(@"OK %@", albumId); 
      } 
      else { 
       NSLog(@"Error: %@",error.userInfo); 
      } 
     }]; 
    [connection start]; 
} 

- (void)sessionStateChanged:(FBSession *)session state:(FBSessionState) state error:(NSError *)error { 
    switch (state) { 
     case FBSessionStateOpen: 
     { 
      [[FBRequest requestForMe] startWithCompletionHandler: 
      ^(FBRequestConnection *connection, 
       NSDictionary<FBGraphUser> *user, 
       NSError *error) { 
       if (error) { 
        //error 
       } 
       else { 
        NSLog(@"User session found"); 
       } 
      }]; 
     } 
      break; 
     case FBSessionStateClosed: 
     case FBSessionStateClosedLoginFailed: 
      [FBSession.activeSession closeAndClearTokenInformation]; 
      break; 
     default: 
      break; 
    } 
} 
+0

是不是可以使用SLComposeViewController来做同样的事情 – Santosh 2014-10-28 10:48:24

+0

有趣的是,在这篇文章中,问题/要求完全相反。 http://stackoverflow.com/questions/14514179/facebook-ios6-integration-adds-image-to-album-and-not-separate-posts – 2014-10-28 11:29:09

+0

是的,我刚才看到了这个问题。但它是在单张图像后。 – Santosh 2014-10-28 11:42:15

相关问题