2014-10-28 58 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

相關問題