iOS 5 et le framework Twitter techniques avancées

Dans la première partie de ce didacticiel en deux parties sur le cadre Twitter, j'ai parlé de TWTweetComposeViewController. Je vous ai montré comment utiliser cette classe pour composer et envoyer des tweets avec un minimum d'effort de votre part. Dans ce tutoriel, je parle du plus avancé TWRequest classe. Avec cette classe, vous pouvez parler directement à l'API de Twitter, ce qui vous donne beaucoup plus de contrôle et de flexibilité.!

Ce tutoriel abordera également les avantages de l’utilisation de TWRequest au lieu de créer et d’exécuter votre propre requête HTTP et pourquoi vous êtes encouragé à utiliser TWRequest si vous décidez d'interagir avec l'API Twitter sur iOS 5.


Résumé du projet

Dans le premier tutoriel, je vous ai montré comment ajouter le framework Twitter à votre projet et comment utiliser le TWTweetComposeViewController classe pour composer et envoyer des tweets. Dans cet article, nous allons avancer un peu plus vite car j'aimerais beaucoup couvrir de terrain.


Avant de commencer

Avant de commencer, je tiens à répéter qu'il est nécessaire qu'un ou plusieurs comptes Twitter soient installés sur l'appareil que vous utiliserez pour ce didacticiel. Vous pouvez également utiliser iOS Simulator si vous n'avez pas de périphérique physique à tester. le TWRequest class se charge de l'authentification en demandant au système d'exploitation s'il peut accéder aux comptes Twitter installés sur le périphérique de l'utilisateur. Pour terminer ce didacticiel, assurez-vous d’avoir au moins un compte Twitter installé sur votre appareil ou sur le simulateur iOS. Vous pouvez le vérifier en ouvrant le Réglages application et choix Gazouillement de la liste. Jetez un coup d'œil au premier volet de cette série en deux parties pour plus d'informations..


Étape 1: Configuration du projet

Pour vous montrer à quel point il est facile de se familiariser avec le cadre Twitter et l'API de Twitter, nous allons créer une application à partir de la base. Bien sûr, nous ne construirons pas de client Twitter à part entière, mais vous serez surpris de la facilité avec laquelle il est facile de se mettre en marche avec très peu de temps et d’efforts. Tout cela grâce à l'intégration étroite de Twitter avec iOS.

Créez un nouveau projet Xcode en choisissant le Application à vue unique modèle de la liste des modèles. Nommez votre application Twitter Rocks, entrez un identifiant d'entreprise, définissez iPhone pour la famille d'appareils, et vérifiez Utiliser le comptage automatique des références. Vous pouvez laisser les cases restantes décochées pour ce projet. Indiquez à Xcode où vous souhaitez enregistrer votre projet et appuyez sur Créer.


Étape 2: Configuration de l'interface utilisateur

Avant de commencer à travailler avec le TWRequest classe, je veux d'abord m'occuper de l'interface utilisateur. Pour ce tutoriel, nous allons utiliser une vue sous forme de tableau pour afficher les données que nous recevons de Twitter, c'est-à-dire les tweets. Sélectionnez le fichier d’en-tête de votre contrôleur de vue et créez deux points de vente, un pour la vue tableau et un autre pour une instance de. UIActivityIndicatorView. La vue de l'indicateur d'activité sera visible pendant que nous attendons que notre demande renvoie une réponse. Nous déclarons également une variable d'instance nommée la source de données qui tiendra les résultats (tweets) de notre demande. Il servira de source de données de notre vue tableau. Une instance de NSArray est parfait pour nos besoins. Assurez-vous que votre contrôleur de vue est conforme à la source de données de la vue table et aux protocoles de délégation..

Avant de créer notre interface utilisateur, nous devons également ajouter deux actions au fichier d’en-tête de notre contrôleur de vue. La première action requestTimeline: lance la demande qui récupère la chronologie publique du compte Mobiletuts + Twitter. La deuxième action, requestMentions:, lance la demande qui récupère les mentions du compte Twitter installé sur votre appareil. Ne vous inquiétez pas pour ces actions pour l'instant. Je vais tout expliquer plus en détail une fois que nous commencerons à les mettre en œuvre..

N'oubliez pas de synthétiser les accesseurs de nos points de vente dans le fichier d'implémentation de notre contrôleur de vue et d'ajouter une implémentation vide pour chaque action afin d'éviter tout avertissement du compilateur..

 #importation  @interface ViewController: UIViewController  __weak UITableView * _tableView; __weak UIActivityIndicatorView * _activityIndicatorView; NSArray * _dataSource;  @property (nonatomic, faible) IBOutlet UITableView * tableView; @property (nonatomic, faible) IBOutlet UIActivityIndicatorView * activityIndicatorView; @property (nonatomic, strong) NSArray * dataSource; - requestTimeline (IBAction): expéditeur (id); - (IBAction) requestMentions: (id) expéditeur; @fin
 @synthesize tableView = _tableView, activityIndicatorView = _activityIndicatorView; @synthesize dataSource = _dataSource;
 - (IBAction) requestTimeline: (id) expéditeur  - (IBAction) requestMentions: (id) expéditeur 

Rendez-vous sur le fichier XIB de notre contrôleur de vue et commencez par faire glisser une barre d'outils vers le bas de la vue du contrôleur de vue. Par défaut, la barre d’outils a un bouton, alors faisons glisser une instance supplémentaire de UIBarButtonItem à la barre d'outils. Organisez-le en faisant glisser une instance d'espace flexible entre les deux boutons de la barre pour les pousser des côtés opposés. Sélectionnez le bouton gauche et, dans le menu Inspecteur d'attributs (troisième onglet à droite), entrez Chronologie dans le Titre champ. Donnez au bouton droit un titre de Mentions. Contrôle glisser de l’élément du bouton de la barre de gauche à la Propriétaire du fichier et sélectionnez le requestTimeLine: action du menu qui apparaît. Faites de même pour le bouton de droite, mais sélectionnez le requestMentions: action du même menu.

L'interface utilisateur est presque terminée. Faites glisser une vue de table et une vue d'indicateur d'activité vers la vue de notre contrôleur de vue. Placez la vue d'indicateur d'activité au centre de la vue du contrôleur de vue et cochez la case en regard de Se cache à l'arrêt dans le Inspecteur d'attributs. Connectez les deux vues aux prises que nous avons déclarées il y a une minute en faisant glisser le contrôle de la Propriétaire du fichier à la vue de table et à la vue d'indicateur d'activité. Enfin, sélectionnez la vue tableau, ouvrez le Inspecteur de connexions, et pointe le la source de données et déléguer points de vente de la vue de la table à la Propriétaire du fichier objet.

Interface utilisateur? Terminé.


Étape 3: Implémentation de la vue Table

Nous devons faire un peu plus de travail avant de pouvoir commencer à jouer avec le framework Twitter. Outre la mise en œuvre de nos actions, ce que nous allons faire dans une minute, nous devons nous assurer que les méthodes requises du protocole de source de données de vue table sont implémentées. Même si nous avons affecté notre contrôleur de vue en tant que délégué de la vue de table, nous n'implémenterons aucune des méthodes de délégation de vue de table de ce didacticiel. La première méthode que nous allons implémenter est numberOfSectionsInTableView:. La mise en œuvre est simple. Nous nous assurons que notre source de données est définie et renvoyons 1 si c'est le cas ou 0 si ce n'est pas le cas. Facile. Droite?

 - (NSInteger) numberOfSectionsInTableView: (UITableView *) tableView if (self.dataSource) return 1;  else retour 0; 

La deuxième méthode de source de données est presque identique. Dans tableView: numberOfRowsInSection:, nous vérifions que la source de données est définie et, le cas échéant, nous renvoyons le nombre d'éléments de la source de données. Si notre source de données n'est pas définie, nous retournons 0.

 - (NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection: (NSInteger) section if (self.dataSource) return self.dataSource.count;  else retour 0; 

Dans tableView: cellForRowAtIndexPath:, nous déclarons un identifiant de réutilisation statique (pour la réutilisation de cellule de vue tableau) et demandons à la vue tableau une cellule que nous pouvons réutiliser. Si la vue tableau ne renvoie pas une cellule réutilisable, nous initialisons une nouvelle cellule. Nous ne configurerons pas la cellule pour l'instant. Nous devons d’abord savoir à quoi ressemblent les données que nous recevons de Twitter..

 - (UITableViewCell *) tableView: (UITableView *) aTableView cellForRowAtIndexPath: (NSIndexPath *) indexPath statique NSString * CellIdentifier = @ "Identificateur de cellule"; UITableViewCell * cell = [aTableView dequeueReusableCellWithIdentifier: CellIdentifier]; if (cell == nil) cell = [[UITableViewCell alloc]] initWithStyle: UITableViewCellStyleSubtitle reuseIdentifier: CellIdentifier];  // à suivre. Return cell; 

Étape 4: Ajout du cadre Twitter

Avant de pouvoir utiliser le cadre Twitter, nous devons lier notre projet à celui-ci. Si nous voulons également faire des demandes authentifiées, nous devons également lier notre projet au cadre de comptes. Faisons-le maintenant.

Sélectionnez votre projet dans le Navigateur de projet et sélectionnez notre cible dans la liste des cibles. Choisir Phases de construction en haut, ouvrez le Lien binaire avec des bibliothèques tiroir, et ajouter les cadres Twitter et Comptes au projet.

Si vous avez lu la première partie de ce didacticiel, vous vous souviendrez peut-être qu'il est également nécessaire d'importer les en-têtes de la structure dans le fichier d'en-tête de notre contrôleur de vue pour pouvoir utiliser ces structures dans notre contrôleur de vue. Insérez-les immédiatement après la déclaration d'importation UIKit.

 #importation  #importation  #importation 

Étape 5: Earth To Twitter

Je souhaite vous montrer deux choses: (1) comment envoyer des tweets sans authentification et (2) comment envoyer des demandes authentifiées à l'API Twitter. La différence est évidente, mais il existe une différence importante en termes d'expérience utilisateur. Si une application iOS souhaite envoyer une requête authentifiée à l'API de Twitter, l'utilisateur doit explicitement donner à l'application la permission d'accéder aux comptes Twitter installés sur l'appareil. En d’autres termes, l’authentification est faite pour vous lorsque vous utilisez le framework Twitter, mais l’utilisateur garde le contrôle en ce qui concerne l’octroi ou le refus de l’accès à son compte Twitter..


Étape 6: demandes Twitter non authentifiées

Pour illustrer le fonctionnement des requêtes Twitter non authentifiées, nous vous demanderons la chronologie du compte Mobiletuts + Twitter. La magie va se passer dans notre requestTimeline: méthode. Comme toujours, je vous guiderai pas à pas dans la mise en œuvre. Avant d’envoyer notre demande à Twitter, nous masquons notre vue tableau et affichons notre vue indicateur d’activité en lui envoyant un message. commencerAnimer message. Ensuite, nous créons ensuite l'URL de notre requête Twitter. Je ne parlerai pas des spécificités de l'API Twitter dans ce tutoriel car je souhaite me concentrer sur l'aspect iOS de l'interrogation de l'API. Pour plus d'informations sur l'API de Twitter, consultez la documentation..

Notre TWRequest exemple, que nous allons créer prochainement, accepte un dictionnaire de paramètres. Ces paramètres vous permettent d'affiner votre demande. Dans notre exemple, nous spécifions le calendrier que nous voulons voir, combien de tweets nous voulons extraire, et nous avons également activé le drapeau pour include_entities à 1. Les entités sont incroyablement utiles. Au lieu de simplement recevoir le texte d'un tweet, les entités représentent les parties intéressantes d'un tweet, telles que des images, des URL ou des mentions d'autres utilisateurs de Twitter dans le tweet..

 [self.tableView setHidden: YES]; [self.activityIndicatorView startAnimating]; NSURL * url = [NSURL URLWithString: @ "http://api.twitter.com/1/statuses/user_timeline.json"]; NSMutableDictionary * parameters = [[NSMutableDictionary alloc] init]; [paramètres setObject: @ "envatomobile" pourKey: @ "nom_écran"]; [paramètres setObject: @ "50" pourKey: @ "count"]; [paramètres setObject: @ "1" pourKey: @ "include_entities"];

Il est temps de créer notre TWRequest exemple. Nous l'initialisons avec (1) notre URL, (2) notre dictionnaire de paramètres et (3) une méthode de requête (TWRequestMethod). Ce dernier est le verbe HTTP. Dans notre cas, nous utilisons TWRequestMethodGET, ce qui correspond à une requête GET. Les autres options sont TWRequestMethodPOST et TWRequestMethodDELETE.

 TWRequest * request = [[TWRequest alloc] initWithURL: paramètres d'url: paramètres requestMethod: TWRequestMethodGET];

Nous pouvons maintenant exécuter notre demande en appelant performRequestWithHandler: sur notre instance de demande. J'aime les blocs et cette méthode, comme beaucoup de méthodes iOS 5, prend un bloc (TWRequestHandler) comme seul paramètre. Le bloc est exécuté dès que nous recevons la réponse de l'API Twitter. Le bloc prend trois paramètres, (1) les données de réponse brutes, (2) la réponse HTTP de notre demande et (3) une erreur en cas de problème..

Avant d'examiner le gestionnaire de demandes proprement dit, il est important de savoir que nous attendons une réponse JSON (consultez le dernier composant de notre URL de demande). Le gestionnaire de demandes, cependant, nous donne une instance de NSData. Cela signifie que nous devons d’abord sérialiser cet objet de données en utilisant NSJSONSérialisation, ce qui nous donnera un tableau contenant les tweets que nous avons demandés.

Dans le gestionnaire de demandes, nous vérifions d’abord si l’objet de données de réponse n’est pas néant. Si tel est le cas, nous sérialisons l'objet de données de réponse et attribuons la valeur de retour à notre objet source de données. Il est toujours important de vérifier les erreurs lors de la demande d'un service Web, car vous ne savez jamais ce que vous allez récupérer. Dans notre exemple, nous vérifions si notre objet de source de données n'est pas néant. Si tel est le cas, nous rechargeons et affichons la vue tableau et masquons la vue indicateur d'activité en lui envoyant un message. arrêterAnimer message. Si notre demande ne renvoie pas ce que nous attendions, nous enregistrons l'erreur appropriée dans la console..

 [request performRequestWithHandler: ^ (NSData * responseData, NSHTTPURLResponse * urlResponse, erreur NSError *) if (responseData! = nil) NSError * erreur = nil; self.dataSource = [NSJSONSerialization JSONObjectWithData: responseData options: erreur NSJSONReadingMutableLeaves: & error]; if (self.dataSource! = nil) [self.tableView reloadData]; [self.tableView setHidden: NO]; [self.activityIndicatorView stopAnimating];  else NSLog (@ "Erreur lors de la sérialisation des données de réponse% @ avec les informations utilisateur% @.", error, error.userInfo);  else NSLog (@ "Erreur lors de la demande de chronologie% @ avec les informations utilisateur% @.", error, error.userInfo); ];

Si vous souhaitez savoir comment chaque tweet est structuré, je vous encourage à consigner l'objet de données de réponse sérialisé dans la console. Je n'entrerai pas dans les détails car je souhaite que ce didacticiel reste au cœur du développement iOS. Avant de pouvoir afficher quoi que ce soit dans notre vue tableau, nous devons finaliser notre tableView: cellForRowAtIndexPath: méthode. La configuration de la cellule est à la fois simple et pas si simple. Regardez l'implémentation complète ci-dessous.

 - (UITableViewCell *) tableView: (UITableView *) aTableView cellForRowAtIndexPath: (NSIndexPath *) indexPath statique NSString * CellIdentifier = @ "Identificateur de cellule"; UITableViewCell * cell = [aTableView dequeueReusableCellWithIdentifier: CellIdentifier]; if (cell == nil) cell = [[UITableViewCell alloc]] initWithStyle: UITableViewCellStyleSubtitle reuseIdentifier: CellIdentifier];  NSDictionary * tweet = [self.dataSource objectAtIndex: indexPath.row]; cell.textLabel.text = [tweet objectForKey: @ "text"]; cell.imageView.image = [UIImage imageNamed: @ "placeholder"]; dispatch_queue_t queue = dispatch_queue_create ("com.mobiletuts.task", NULL); dispatch_queue_t main = dispatch_get_main_queue (); dispatch_async (file d'attente, ^ NSURL * imageURL = [NSURL URLWithString: [[tweet objectForKey: @ "user"] objectForKey: @ "profile_image_url"]; NSData * imageData = [NSData dataWithContentsOfURL: imageURL (], principal,, cell.imageView.image = [UIImage imageWithData: imageData];);); dispatch_release (file d'attente); cellule de retour; 

Premièrement, nous récupérons le tweet correct dans notre tableau de sources de données. Chaque tweet est une instance de NSDictionary. Dans l'étiquette de texte de notre cellule, nous affichons le tweet lui-même en obtenant la valeur de la clé. texte. Bien entendu, une application Twitter ne serait pas complète sans images. Chaque tweet nous donne l'URL de l'image de profil de la personne qui a envoyé le tweet. Si vous avez lu l'un de mes tutoriels précédents, vous avez peut-être une idée de ce que je vais dire maintenant. Si nous demandions une image de profil pour chaque tweet sur le fil principal, les performances de notre affichage sous forme de tableau seraient terribles. Notre thread principal serait bloqué chaque fois qu'une demande serait faite et le défilement serait tout sauf lisse. J'aime lisse, nous avons donc besoin de résoudre ce problème.

Une solution possible est d'utiliser Grand Central Dispatch ou GCD. Je n'entrerai pas dans les détails de GCD dans ce tutoriel, mais l'idée est simple. Nous faisons la demande pour chaque image de profil sur un fil séparé. Après avoir reçu les données, nous créons un UIImage à partir des données et définir l'image de la vue d'image de la cellule avec cette image. Il est essentiel que ce dernier soit effectué sur le fil principal pour plusieurs raisons. Ne vous inquiétez pas si vous ne comprenez pas bien ce qui se passe, car ce n'est pas l'objet de ce tutoriel..

Alternativement, vous pouvez utiliser une bibliothèque comme AFNetworking pour faire abstraction des détails essentiels. Jetez un coup d’œil à l’un de mes tutoriels précédents pour plus d’informations sur la AFNetworking bibliothèque.

Notez qu'avant de demander l'image de profil, je règle l'image de la vue d'image de la cellule avec une image de marque de réservation. Cela est nécessaire pour éviter que certains défauts visuels ne se manifestent.

Générez et exécutez votre application. Appuyez sur le bouton de la timeline en bas à gauche pour récupérer les tweets de la timeline publique du compte Mobile Tuts + Twitter. N'ai-je pas dit que j'aime bien faire défiler les vues de table? Comme vous pouvez le constater, aucune forme de mise en cache n’est en place pour le moment. En d'autres termes, l'image de profil du compte Mobiletuts + Twitter est récupérée plusieurs fois sans nécessité. N'hésitez pas à résoudre ce problème avec votre propre solution de mise en cache personnalisée.


Étape 7: demandes Twitter authentifiées

Les requêtes Twitter authentifiées ressemblent beaucoup aux requêtes non authentifiées. Il suffit de faire un peu de travail supplémentaire pour exécuter une demande authentifiée sur Twitter. Jetons un coup d'oeil à la mise en œuvre de notre requestMentions: méthode pas à pas.

 [self.tableView setHidden: YES]; [self.activityIndicatorView startAnimating]; ACAccountStore * accountStore = [[ACAccountStore alloc] init]; ACAccountType * accountType = [accountStore accountTypeWithAccountTypeIdentifier: ACAccountTypeIdentifierTwitter];

Tout d'abord, nous masquons notre vue tableau et montrons notre vue indicateur d'activité en lui envoyant un message de commencerAnimer. Nous initialisons ensuite un magasin de compte (ACAccountStore). Cet objet nous permettra d’avoir accès aux comptes Twitter installés sur l’appareil. Ensuite, nous créons une instance de ACAccountType en appelant accountTypeWithAccountTypeIdentifier: sur notre instance de magasin de compte. Cette méthode accepte un paramètre, à savoir le type de compte auquel nous souhaitons avoir accès. Dans notre exemple, nous voulons accéder au (x) compte (s) Twitter sur l'appareil.

 [accountStore requestAccessToAccountsWithType: accountType withCompletionHandler: ^ (BOOL accordé, erreur NSError *) if (accordé)  else NSLog (@ "L'utilisateur ne nous a pas donné la permission d'accéder à son compte (s) Twitter."); ];

Avec notre compte magasin et notre type de compte, nous demandons à l’utilisateur de nous donner l’accès à son (ses) compte (s) Twitter en appelant requestAccessToAccountsWithType: withCompletionHandler: sur notre instance de magasin de compte. Nous passons deux paramètres, (1) l'instance de type de compte et (2) un autre bloc. Pourquoi avons-nous besoin de passer un bloc? Lorsque cette méthode est appelée, l'appareil présente à l'utilisateur une vue d'alerte qui l'informe que notre application demande l'accès au (x) compte (s) Twitter de l'appareil. Le gestionnaire de blocage ou d'achèvement est exécuté lorsque l'utilisateur accorde ou refuse l'accès à l'application. Le bloc accepte deux paramètres, (1) une valeur booléenne indiquant si l'accès a été accordé et (2) un objet d'erreur qui nous indique ce qui s'est mal passé si quelque chose s'est mal passé..

Même si le gestionnaire d'achèvement semble simple et très similaire à la manière dont nous avons configuré et traité plus tôt la demande Twitter non authentifiée, il existe quelques différences importantes. Si l'utilisateur nous a autorisé l'accès à son (ses) compte (s) Twitter, nous demandons au compte store de tous les comptes Twitter installés sur l'appareil..

 NSArray * accounts = [accountStore accountsWithAccountType: accountType];

Si un ou plusieurs comptes ont été retournés, nous prenons une référence au premier compte du tableau. Bien sûr, dans une application réelle, ce n’est pas la meilleure approche car vous voudriez vous assurer d’obtenir un compte spécifique. Pour notre application, cela n'a pas d'importance. Tout ce qui reste à faire est de créer la demande Twitter et de l'envoyer à l'API de Twitter. La principale différence avec la demande non authentifiée est que nous définissons la propriété du compte de la demande Twitter sur le compte que nous avons reçu du magasin du compte. Ceci indique la demande (et Twitter d'ailleurs) pour le compte de qui la demande est faite, autrement dit, les mentions que nous demandons. Le traitement de la réponse est identique à la façon dont nous avons traité la réponse pour la demande non authentifiée..

 if (accounts.count) ACAccount * twitterAccount = [accounts objectAtIndex: 0]; [self.tableView setHidden: YES]; [self.activityIndicatorView startAnimating]; NSURL * url = [NSURL URLWithString: @ "http://api.twitter.com/1/statuses/mentions.json"]; NSMutableDictionary * parameters = [[NSMutableDictionary alloc] init]; [paramètres setObject: @ "20" pourKey: @ "count"]; [paramètres setObject: @ "1" pourKey: @ "include_entities"]; TWRequest * request = [[TWRequest alloc] initWithURL: paramètres d'url: paramètres requestMethod: TWRequestMethodGET]; [request setAccount: twitterAccount]; [request performRequestWithHandler: ^ (NSData * responseData, NSHTTPURLResponse * urlResponse, erreur NSError *) if (responseData) NSError * erreur = nil; self.dataSource = [NSJSONSerialization JSONObjectWithData: responseData options: erreur NSJSONReadingMutableLeaves: & error]; if (self.dataSource) [self.tableView reloadData]; [self.tableView setHidden: NO]; [self.activityIndicatorView stopAnimating];  else NSLog (@ "Erreur% @ avec les informations utilisateur% @.", error, error.userInfo); ]; 

N'oubliez pas de jeter un coup d'œil à la mise en œuvre complète de notre requestMentions: méthode ci-dessous. Générez et exécutez votre application, puis appuyez sur le bouton de droite pour demander les mentions de votre compte Twitter..

 - (IBAction) requestMentions: (id) expéditeur [self.tableView setHidden: YES]; [self.activityIndicatorView startAnimating]; ACAccountStore * accountStore = [[ACAccountStore alloc] init]; ACAccountType * accountType = [accountStore accountTypeWithAccountTypeIdentifier: ACAccountTypeIdentifierTwitter]; [accountStore requestAccessToAccountsWithType: accountType withCompletionHandler: ^ (BOOL accordé, erreur NSError *) if (accordé) NSArray * accounts = [accountStore accountsWithAccountType: accountType]; if (accounts.count) ACAccount * twitterAccount = [accounts objectAtIndex: 0]; NSURL * url = [NSURL URLWithString: @ "http://api.twitter.com/1/statuses/mentions.json"]; NSMutableDictionary * parameters = [[NSMutableDictionary alloc] init]; [paramètres setObject: @ "20" pourKey: @ "count"]; [paramètres setObject: @ "1" pourKey: @ "include_entities"]; TWRequest * request = [[TWRequest alloc] initWithURL: paramètres d'url: paramètres requestMethod: TWRequestMethodGET]; [request setAccount: twitterAccount]; [request performRequestWithHandler: ^ (NSData * responseData, NSHTTPURLResponse * urlResponse, erreur NSError *) if (responseData) NSError * erreur = nil; self.dataSource = [NSJSONSerialization JSONObjectWithData: responseData options: erreur NSJSONReadingMutableLeaves: & error]; if (self.dataSource) [self.tableView reloadData]; [self.tableView setHidden: NO]; [self.activityIndicatorView stopAnimating];  else NSLog (@ "Erreur% @ avec les informations utilisateur% @.", error, error.userInfo); ];  else NSLog (@ "L'utilisateur ne nous autorise pas à accéder à son / ses compte (s) Twitter."); ]; 

Conclusion

Ce didacticiel n’était pas le plus court, mais vous devriez maintenant avoir une bonne idée de la façon dont vous pouvez tirer parti du cadre Twitter dans vos propres applications. Grâce à l'intégration de Twitter dans le système d'exploitation depuis iOS 5, il est incroyablement facile et simple de parler à l'API de Twitter..

Si vous voulez seulement laisser l'utilisateur envoyer un tweet de temps en temps, les choses sont encore plus faciles. TWTweetComposeViewController fournit toute l'infrastructure nécessaire pour gérer ce travail avec élégance.