iPhone SDK Connectez-vous à Twitter avec OAuth

Ce didacticiel vous montrera comment intégrer rapidement l’API de Twitter au kit de développement logiciel (SDK) pour iPhone à l’aide de: Twitter-OAuth-iPhone, une bibliothèque Twitter prête à l'emploi pour iPhone composée de plusieurs projets open source combinés et synthétisés pour une mise en œuvre facile par Ben Gottlieb.

Changements ultérieurs dans Techniques et logiciels

Certains aspects des applications ou techniques utilisées dans ce tutoriel ont changé depuis sa publication initiale. Cela pourrait le rendre un peu difficile à suivre. Nous vous recommandons de consulter ces didacticiels plus récents sur le même sujet:

  • iOS 5 et le framework Twitter: premières étapes
  • iOS 5 et le framework Twitter: techniques avancées

REMARQUE: Avec la sortie d'iOS 5, cet article est maintenant obsolète. À l'avenir, vous devriez sérieusement envisager d'utiliser le cadre Twitter fourni avec le SDK iOS 5. Ne considérez la mise en œuvre de la solution illustrée ici que si vous devez prendre en charge des utilisateurs d'anciennes versions d'iOS.

Configuration du projet

Ce tutoriel utilisera une application simple appelée «TwitterRush» pour démontrer l'intégration de Twitter OAuth pour iPhone. En téléchargeant l'application TwitterRush, vous pourrez suivre précisément toutes les étapes de ce didacticiel. Cependant, si vous avez déjà un projet iPhone que vous souhaitez connecter avec l'API Twitter, vous devriez toujours pouvoir suivre votre propre code avec seulement de légères modifications..

En plus de TwitterRush ou de votre propre projet, vous devrez également télécharger le projet Twitter-OAuth-iPhone de Ben Gottlieb disponible sur GitHub..

Étape 1: Copiez le dossier Twitter + OAuth.

Après avoir téléchargé et désarchivé la bibliothèque Twitter-OAuth-iPhone, faites glisser le dossier intitulé «Twitter + OAuth» dans le dossier «Autres sources» de la zone de navigation Xcode 4. Assurez-vous de cocher l'option «Copier les éléments dans le dossier du groupe de destination (si nécessaire)» et cliquez sur «Terminer».

Essayer de compiler et d’exécuter votre application maintenant entraînera BEAUCOUP d’erreurs (90 au moment de la rédaction de cet article avec iOS SDK 4). Ne vous inquiétez pas: nous les corrigerons facilement à l'étape 2.

Étape 2: Ajouter la bibliothèque libxml2

Dans la zone de navigation de Xcode 4, sélectionnez le nom du projet (dans ce cas, "TwitterRush"). Ensuite, sélectionnez la cible actuelle ("TwitterRush" ici encore), puis sélectionnez l'onglet "Build Phases". Développez l'option "Link Binary With Libraries", puis cliquez sur le bouton "+" pour ajouter un nouveau framework. Tapez "libxml2" dans le champ de recherche et sélectionnez le libxml2.dylib bibliothèque qui apparaît dans la liste. Cliquez sur "Ajouter" pour inclure cette bibliothèque dans la phase de liaison de votre projet..

Une fois ces étapes terminées, votre écran devrait ressembler à ceci:

Après avoir ajouté la bibliothèque à votre projet, vous devrez modifier le paramètre «chemins de recherche en-tête» dans les paramètres de construction de votre projet. Pour ce faire, désélectionnez la cible et sélectionnez le projet TwitterRush actuel. Ouvrez l'onglet "Paramètres de construction" et recherchez l'entrée "Chemins de recherche d'en-tête". Double-cliquez sur ce paramètre, puis cliquez sur le bouton «+» en bas à gauche de la boîte de dialogue pour ajouter un nouveau chemin de recherche. Cochez la case «récursive», double-cliquez sur le champ «Chemin» et entrez le chemin dynamique suivant:

 $ (SDKROOT) / usr / include / libxml2

Après avoir cliqué sur "Terminé", votre écran devrait ressembler à ceci:

Si vous exécutez l'application à partir de la barre de menu Xcode, vous devriez maintenant être capable de la construire sans erreur de compilation.!

Étape 3: Déclarez le protocole NSXMLParserDelegate

Bien que vous puissiez maintenant compiler et exécuter l'application sans aucune erreur, il existe un certain nombre d'avertissements liés aux modifications apportées au protocole iOS4 SDK et au protocole NSXMLParserDelegate. Vous devrez déclarer explicitement que MGTwitterStatusesParser.h et MGTwitterXMLParser.h se conformer à ce protocole afin d'éviter que ces avertissements ne se produisent.

Pour ce faire, ouvrez le MGTwitterStatusesParser.h déposer et modifier le @interface déclaration en déclarant le NSXMLParserDelegate protocole comme suit:

 @interface MGTwitterStatusesParser: MGTwitterXMLParser   

Maintenant, fais la même chose pour MGTwitterXMLParser.h, modifier le @interface déclaration à lire:

 @interface MGTwitterXMLParser: NSObject   

Vous devriez maintenant pouvoir compiler l'application en douceur, sans générer d'erreurs ni d'avertissements! Nous sommes maintenant prêts à intégrer la bibliothèque Twitter-OAuth-iPhone à notre code..

Étape 4: Importez SA_OAuthTwitterController.h & déclarez SA_OAuthTwitterEngine

Nous devons maintenant commencer à importer les classes de la bibliothèque que nous utiliserons pour nous connecter à l'API Twitter. Ouvrir TwitterRushViewController.h et modifiez le code pour lire comme suit:

 #importation  #import "SA_OAuthTwitterController.h" @class SA_OAuthTwitterEngine; @interface TwitterRushViewController: UIViewController  IBOutlet UITextField * tweetTextField; SA_OAuthTwitterEngine * _engine;  @property (nonatomic, keep) IBOutlet UITextField * tweetTextField; - (IBAction) updateTwitter: (id) expéditeur; @fin 

Sur la ligne 2, nous importons le SA_OAuthTwitterController classe à utiliser dans notre contrôleur de vue. Sur la ligne 4, nous transmettons la déclaration SA_OAuthTwitterEngine classe afin que nous puissions déclarer une instance de cette classe dans le @interface sans importer réellement le fichier d'en-tête. Sur la ligne 6, nous déclarons le SA_OAuthTwitterControllerDelegate protocole - cela nous permettra de répondre facilement aux événements de l'API Twitter ultérieurement. Enfin, à la ligne 10, nous déclarons le _moteur objet en tant qu'instance du SA_OAuthTwitterEngine classe.

Passons maintenant au TwitterRushViewController.m fichier. Importer le SA_OAuthTwitterEngine classe que nous venons de transmettre déclarée dans l'interface de classe:

 #import "SA_OAuthTwitterEngine.h" 

Parce que le SA_OAuthTwitterControllerDelegate ne contient que des déclarations de méthodes facultatives; à ce stade, vous devriez à nouveau pouvoir compiler et exécuter votre application sans erreurs ni avertissements..

Étape 5: Définissez vos informations d'identification OAuth pour l'API Twitter

Pour obtenir un accès OAuth à l'API Twitter, vous devez d'abord créer une clé de consommateur et une clé secrète pour Twitter afin de pouvoir identifier et authentifier votre application. Vous pouvez le faire à partir du site Web Twitter en vous connectant à votre compte et en accédant au formulaire d'inscription de l'application. Lors du processus d'inscription, veillez à spécifier «client» comme type d'application, cochez la case «Oui, utilisez Twitter pour la connexion» et sélectionnez «Lecture et écriture» comme type d'accès par défaut pour permettre à votre application iPhone de publier tweets de la part de vos utilisateurs.

Une fois que vous avez enregistré votre application et que Twitter a généré vos informations d’identification, ajoutez ce qui suit à TwitterRushViewController.m au dessus de la classe @la mise en oeuvre:

 #define kOAuthConsumerKey @ "Votre clé de consommateur ici" // REPLACE With OAuth de Twitter App #define kOAuthConsumerSecret @ "Votre secret de consommateur ici" // // REPLACE with de Twitter App OAuth Secret 

Nous utiliserons ces constantes momentanément lorsque nous instancierons notre _moteur objet.

Étape 6: Lancez l'écran de connexion Twitter

Pour notre cas d'utilisation, nous voulons initialiser la _moteur objet lorsque notre ViewController est créé, puis affichez l'écran de connexion Twitter OAuth dès que le contrôleur de vue a fini de se charger. Pour initialiser le _moteur objet, modifiez le viewDidAppear méthode à lire comme suit:

 - (void) viewDidAppear: (BOOL) animé if (! _ engine) _engine = [[SA_OAuthTwitterEngine alloc]] initOAuthWithDelegate: self]; _engine.consumerKey = kOAuthConsumerKey; _engine.consumerSecret = kOAuthConsumerSecret;  

Maintenant allez-y et relâchez le _moteur objet dans la méthode dealloc de notre contrôleur:

 - (vide) dealloc [_engine release]; [version de tweetTextField]; [super dealloc];  

Une fois le chargement de notre vue terminé, nous souhaitons lancer immédiatement l’écran de connexion Twitter. Pour ce faire, vous devrez modifier à nouveau le viewDidAppear méthode comme suit:

 - (void) viewDidAppear: (BOOL) animé if (! _ engine) _engine = [[SA_OAuthTwitterEngine alloc]] initOAuthWithDelegate: self]; _engine.consumerKey = kOAuthConsumerKey; _engine.consumerSecret = kOAuthConsumerSecret;  UIViewController * controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine: _ délégué du moteur: auto]; if (contrôleur) [self presentModalViewController: contrôleur animé: YES];  

Si vous exécutez l'application maintenant, vous constaterez que nous présentons avec succès l'écran de connexion Twitter chaque fois que notre affichage personnalisé est affiché. Cependant, il y a un problème majeur avec cette configuration: l'écran de connexion sera toujours affiché lorsque la vue apparaîtra, même si l'utilisateur est déjà connecté. Nous devons ajouter une condition qui affichera ce contrôle uniquement si l'utilisateur n'a pas encore été connecté via OAuth.

Pour ce faire, ajoutez la condition suivante avant d’afficher la vue:

 if (! [_ engine isAuthorized]] UIViewController * controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine: _ délégué de moteur: auto]; if (contrôleur) [self presentModalViewController: contrôleur animé: YES];  

le est autorisé La méthode retournera une valeur booléenne TRUE si nous avons un jeton d’authentification OAuth. Donc, ce conditionnel teste simplement si nous ne pas avoir l'autorisation, puis affiche le nom d'utilisateur Twitter si nécessaire.

Pour le est autorisé méthode de travail, nous devons également ajouter les éléments suivants SA_OAuthTwitterEngineDelegate Méthodes de protocole responsables du stockage de notre jeton d’authentification OAuth après la première connexion:

 // ============================================= =============================================== ======================== #pragma mark SA_OAuthTwitterEngineDelegate - (void) storeCachedTwitterOAuthData: (NSString *) données pourUsername: (NSString *) username  NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject: data forKey: @ "authData"]; [synchroniser par défaut];  - (NSString *) cachedTwitterOAuthDataForUsername: (NSString *) nom d'utilisateur return [[NSUserDefaults standardUserDefaults] objectForKey: @ "authData"];  

Étape 7: Publiez des mises à jour sur Twitter

Dans ce qui est peut-être l'étape la plus simple de l'ensemble du processus, ajoutez la ligne de code suivante à updateTwitter, notre méthode personnalisée IBAction, pour publier une mise à jour sur Twitter:

 [_engine sendUpdate: tweetTextField.text]; 

Voila! Vous devriez maintenant publier des mises à jour sur votre flux Twitter. Cependant, nous n'avons pas encore terminé. Que se passe-t-il si notre application ne parvient pas à publier la mise à jour? Et si nous voulions présenter une vue de confirmation si le tweet est posté avec succès? Heureusement, le TwitterEngineDelegate le protocole a deux méthodes définies uniquement dans ce but.

Ajoutez le code suivant à TwitterRushViewController.m:

 // ============================================= =============================================== ========================= #pragma mark TwitterEngineDelegate - (void) requestSucceeded: (NSString *) requestIdentifier NSLog (@ "Request% @ succédé ", requestIdentifier);  - (void) requestFailed: (NSString *) requestIdentifier withError: (NSError *) error NSLog (@ "La requête% @ a échoué avec l'erreur:% @", requestIdentifier, error);  

Vous pouvez voir que l'application va maintenant enregistrer les messages de succès et d'échec sur la console en fonction de ce qui se passera après le clic sur le bouton «Tweet». Ce comportement peut être facilement modifié pour répondre aux besoins de vos propres applications..

Conclusion

Si vous avez suivi les instructions détaillées ci-dessus, vous devriez maintenant pouvoir publier des mises à jour de statut sur Twitter au nom de vos utilisateurs.!

Le plein TwitterRushViewController.h Le fichier devrait maintenant ressembler à ceci:

 #importation  #import "SA_OAuthTwitterController.h" @class SA_OAuthTwitterEngine; @interface TwitterRushViewController: UIViewController  IBOutlet UITextField * tweetTextField; SA_OAuthTwitterEngine * _engine;  @property (nonatomic, keep) IBOutlet UITextField * tweetTextField; - (IBAction) updateTwitter: (id) expéditeur; @fin 

Le plein TwitterRushViewController.m le fichier doit indiquer:

 #import "TwitterRushViewController.h" #import "SA_OAuthTwitterEngine.h" / * Définissez les constantes ci-dessous avec la clé et le secret Twitter de votre application. Créez des identifiants Twitter OAuth en enregistrant votre application en tant que client OAuth ici: http://twitter.com/apps/new * / #define kOAuthConsumerKey @ "Votre clé ici" // REMPLACEZ avec une application OAuth Twitter #define kOAuthConsumerSecret @ "Votre Secret Here "// REPLACE With Twitter App OAuth Secret @implementation TwitterRushViewController @synthesize tweetTextField; Méthodes personnalisées #pragma mark - (IBAction) updateTwitter: (id) expéditeur // Supprimez le clavier [tweetTextField resignFirstResponder]; // Le code d'intégration de Twitter va ici [_engine sendUpdate: tweetTextField.text];  #pragma mark ViewController Lifecycle - (void) viewDidAppear: (BOOL) animé // Code d'initialisation / de connexion Twitter va ici si (! _ moteur) _engine = [[SA_OAuthTwitterEngine alloc] initaniuthWithDelegate: self]; _engine.consumerKey = kOAuthConsumerKey; _engine.consumerSecret = kOAuthConsumerSecret;  if (! [_ engine isAuthorized]] UIViewController * controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine: _ délégué de moteur: auto]; if (contrôleur) [self presentModalViewController: contrôleur animé: YES];  - (void) viewDidUnload [version de tweetTextField]; tweetTextField = nil;  - (void) didReceiveMemoryWarning [super didReceiveMemoryWarning];  - (void) dealloc [version de moteur]; [version de tweetTextField]; [super dealloc];  // ============================================ =============================================== ========================= #pragma mark SA_OAuthTwitterEngineDelegate - (void) storeCachedTwitterOAuthData: (NSString *) données pourUsername: (NSString *) nom d'utilisateur NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject: data forKey: @ "authData"]; [synchroniser par défaut];  - (NSString *) cachedTwitterOAuthDataForUsername: (NSString *) nom d'utilisateur return [[NSUserDefaults standardUserDefaults] objectForKey: @ "authData"];  // ============================================ =============================================== ========================== #pragma mark TwitterEngineDelegate - (void) requestSucceeded: (NSString *) requestIdentifier NSLog (@ "Request% @ reussi ", requestIdentifier);  - (void) requestFailed: (NSString *) requestIdentifier withError: (NSError *) error NSLog (@ "La requête% @ a échoué avec l'erreur:% @", requestIdentifier, error);  @fin 

Merci d'avoir lu ce tutoriel sur la bibliothèque Twitter-OAuth-iPhone, et un merci tout particulier à Ben Gottlieb, Matt Gemmell, Jon Crosby, Chris Kimpton et Isaiah Carew. Sans leur travail acharné, la mise en œuvre de l'API Twitter avec le kit de développement logiciel iPhone prendrait beaucoup, beaucoup.

Vous avez des questions ou des commentaires sur ce tutoriel? Laissez-les dans la section des commentaires ci-dessous ou envoyez un message @markhammonds directement sur Twitter. Points bonus pour avoir terminé ce tutoriel et utilisé l'application TwitterRush pour m'envoyer un message!