2011-11-14 3 views
7

Existe-t-il un moyen d'ajouter une photo à la chronologie Twitter à l'aide de TWRequest ou de quelque chose comme ça? Je suis très très perdu dans ce cas.iOS 5 Joindre une photo à Twitter avec l'API Twitter

Je peux publier une mise à jour de statut en utilisant TWRequest pour iOS5 et MGTwitterEngine pour la version iOS précédente, mais je ne suis pas en mesure d'attacher un UIImage à la mise à jour.

Merci d'avance pour toute aide fournie.

Répondre

15

J'ai trouvé et utilisé tant de grandes réponses sur ce site, Merci à tous, pensé qu'il est temps de redonner :) Élaborant sur la réponse de Noé, c'est le code final qui a fonctionné pour moi d'obtenir une image et le texte sur un tweet en utilisant TWRequest ...

  TWRequest *postRequest = [[TWRequest alloc] initWithURL:[NSURL URLWithString:@"https://upload.twitter.com/1/statuses/update_with_media.json"] parameters:nil requestMethod:TWRequestMethodPOST]; 

      UIImage * image = [UIImage imageNamed:@"myImage.png"]; 

      //add text 
      [postRequest addMultiPartData:[@"I just found the secret level!" dataUsingEncoding:NSUTF8StringEncoding] withName:@"status" type:@"multipart/form-data"]; 
      //add image 
      [postRequest addMultiPartData:UIImagePNGRepresentation(image) withName:@"media" type:@"multipart/form-data"]; 

      // Set the account used to post the tweet. 
      [postRequest setAccount:twitterAccount]; 

      // Perform the request created above and create a handler block to handle the response. 
      [postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { 
       NSString *output = [NSString stringWithFormat:@"HTTP response status: %i", [urlResponse statusCode]]; 
       [self performSelectorOnMainThread:@selector(displayText:) withObject:output waitUntilDone:NO]; 
      }]; 

J'ai trouvé à l'aide TWRequest être la meilleure solution pour mon scénario que je ne voulais pas l'utilisateur de pouvoir modifier le message avant tweeting (qui était la question avec l'utilisation de TWTweetComposeViewController)

+0

Ce code s'applique-t-il uniquement à ios5? ou je peux l'utiliser pour les versions inférieures – iPhone

+0

iOS5 seulement, il ya des bibliothèques de twitter opensource là-bas qui peuvent vous aider si vous avez besoin d'une solution staticfiction

+0

Vous pouvez faire la même chose dans iOS 4 avec [DETweetComposeViewController] (https://github.com/ doubleencore/DETweetComposeViewController). –

1

Avec TWRequest, vous pouvez utiliser la méthode -addMultipartData:withName:type: ce avec les données, par exemple, la méthode UIImageJPEGRepresentation(), pour poster un tweet via la méthode statuses/update_with_media de l'API Twitter.

Si vous utilisez TWTweetComposeViewController, c'est encore plus simple: vous pouvez y attacher une ou plusieurs images UIImage avec la méthode -addImage:.

4

vous pouvez utiliser le contrôleur de vue composer composer TWTweetComposeViewController pour publier des photos sur Twitter sans avoir à traiter avec twitter oauth et les comptes. Voir http://developer.apple.com/library/ios/#documentation/Twitter/Reference/TWTweetSheetViewControllerClassRef/Reference/Reference.html pour plus de détails.

Le problème principal est qu'il s'agit d'une nouvelle fonctionnalité d'iOS 5, de sorte que les utilisateurs qui n'ont pas mis à niveau ne pourront pas l'utiliser.

TWTweetComposeViewController* tweetView = [[TWTweetComposeViewController alloc] init]; 
[tweetView addImage:yourImage]; 

TWTweetComposeViewControllerCompletionHandler 
     completionHandler = 
    ^(TWTweetComposeViewControllerResult result) { 
     switch (result) 
     { 
      case TWTweetComposeViewControllerResultCancelled: 
       NSLog(@"Twitter Result: canceled"); 
       break; 
      case TWTweetComposeViewControllerResultDone: 
       NSLog(@"Twitter Result: sent"); 
       break; 
      default: 
       NSLog(@"Twitter Result: default"); 
       break; 
     } 
     [self dismissModalViewControllerAnimated:YES]; 
    }; 
[tweetView setCompletionHandler:completionHandler]; 
Questions connexes