iPhone SDK conectați-vă la Twitter cu OAuth

Acest tutorial vă va arăta cum să integrați rapid API-ul Twitter folosind SDK-ul iPhone Twitter-OAuth-iPhone, o bibliotecă plug-and-play Twitter pentru iPhone compusă din mai multe proiecte open-source combinate și sintetizate pentru ușurința implementării de către Ben Gottlieb.

Modificări ulterioare ale tehnicilor și ale software-ului

Anumite aspecte ale aplicațiilor sau tehnicilor utilizate în acest tutorial s-au schimbat de când au fost publicate inițial. Acest lucru ar putea face un pic dificil de urmat de-a lungul. Vă recomandăm să consultați aceste tutoriale mai recente pe același subiect:

  • iOS 5 și framework-ul Twitter: primii pași
  • iOS 5 și framework-ul Twitter: tehnici avansate

NOTĂ: Odată cu lansarea versiunii iOS 5, acest articol este învechit. Mergând înainte, trebuie să luați în considerare serios utilizarea platformei Twitter care se livrează împreună cu iOS 5 SDK. Luați în considerare numai implementarea soluției demonstrate aici dacă trebuie să sprijiniți utilizatorii pe versiunile mai vechi ale iOS.

Setarea proiectului

Acest tutorial va folosi o aplicație simplă numită "TwitterRush" pentru a demonstra integrarea Twitter OAuth pentru iPhone. Prin descărcarea aplicației TwitterRush, veți putea urmări cu precizie toți pașii din acest tutorial. Cu toate acestea, dacă aveți deja un proiect iPhone pe care doriți să îl conectați cu API-ul Twitter, ar trebui să aveți în continuare posibilitatea de a urmări în propriul cod cu doar mici modificări.

În plus față de TwitterRush sau propriul proiect, va trebui să descărcați și proiectul lui Ben Gottlieb Twitter-OAuth-iPhone disponibil pe GitHub.

Pasul 1: Copiați folderul Twitter + OAuth

După descărcarea și dezarhivarea bibliotecii Twitter-OAuth-iPhone, glisați folderul intitulat "Twitter + OAuth" în directorul "Alte surse" din zona de navigare Xcode 4. Asigurați-vă că ați bifat opțiunea "Copiați articolele în dosarul grupului de destinație (dacă este necesar)" și faceți clic pe "Finalizați".

Încercarea de a compila și de a rula aplicația dvs. acum va duce la o mulțime de erori (90 la momentul acestei scrieri cu iOS SDK 4). Nu vă faceți griji: le vom rezolva cu ușurință în pasul 2.

Pasul 2: Adăugați librăria libxml2

În zona de navigare a Xcode 4, selectați numele proiectului (în acest caz "TwitterRush"). Apoi, selectați țintă curentă ("TwitterRush" aici din nou), apoi selectați fila "Construiește faze". Extindeți opțiunea "Link Binary With Libraries", apoi faceți clic pe butonul "+" pentru a adăuga un nou cadru. Tastați "libxml2" în caseta de căutare și selectați libxml2.dylib bibliotecă care apare în listă. Faceți clic pe "Adăugați" pentru a include această bibliotecă în faza de conectare a proiectului dvs..

După ce ați finalizat acești pași, ecranul dvs. ar trebui să arate astfel:

După adăugarea bibliotecii în proiectul dvs., va trebui să modificați setarea "Căi de căutare antet" în setările de construire ale proiectului. Pentru a face acest lucru, deselectați țintă și selectați actualul proiect TwitterRush. Deschideți fila "Setări de configurare" și căutați rubrica "Căi de căutare antet". Faceți dublu clic pe această setare și apoi pe butonul "+" din stânga jos a dialogului pop-up pentru a adăuga o nouă cale de căutare. Dați clic pe caseta de validare "recursivă", faceți dublu clic pe câmpul "Cale" și introduceți următoarea cale dinamică:

 $ (SDKROOT) / usr / include / libxml2

După ce faceți clic pe "Efectuat", ecranul dvs. ar trebui să arate similar cu acesta:

Dacă rulați aplicația din meniul Xcode, acum ar trebui să puteți construi aplicația fără erori de compilare!

Pasul 3: Declarați protocolul NSXMLParserDelegate

În timp ce acum puteți să compilați și să executați aplicația fără erori, există o serie de avertismente legate de modificările din kitul SDK iOS4 și din protocolul NSXMLParserDelegate. Va trebui să declarați în mod explicit acest lucru MGTwitterStatusesParser.h și MGTwitterXMLParser.h în conformitate cu acest protocol, pentru a preveni apariția acestor avertismente.

Pentru a face acest lucru, deschideți MGTwitterStatusesParser.h și modificați fișierul @interface declarație prin declararea NSXMLParserDelegate astfel:

 @ interfață MGTwitterStatusesParser: MGTwitterXMLParser   

Acum faceți același lucru MGTwitterXMLParser.h, modificarea @interface declarație pentru a citi:

 @ interfață MGTwitterXMLParser: NSObject   

Acum ar trebui să puteți compila fără probleme aplicația fără a genera erori sau avertismente! Suntem gata să începem să integrăm biblioteca Twitter-OAuth-iPhone cu codul nostru.

Pasul 4: Import SA_OAuthTwitterController.h & Declare SA_OAuthTwitterEngine

Acum trebuie să începem să importem clasele de bibliotecă pe care le vom folosi pentru a vă conecta la API-ul Twitter. Deschis TwitterRushViewController.h și modificați codul după cum urmează:

 #import  #import "SA_OAuthTwitterController.h" @ class SA_OAuthTwitterEngine; @ interfață TwitterRushViewController: UIViewController  IButlet UITextField * tweetTextField; SA_OAuthTwitterEngine * _engine;  @property (nonatomic, reține) IBOutlet UITextField * tweetTextField; - (IBAction) updateTwitter: (id) expeditor; @Sfârșit 

Pe linia 2, importăm SA_OAuthTwitterController clasă pentru utilizarea în cadrul controlerului nostru de vizualizare. Pe linia 4, înainte transmitem declarația SA_OAuthTwitterEngine astfel încât să putem declara o instanță a clasei respective în @interface fără a importa de fapt fișierul antet. Pe linia 6 declarăm SA_OAuthTwitterControllerDelegate protocol - aceasta ne va permite să răspundem cu ușurință evenimentelor Twitter API mai târziu. În cele din urmă, pe linia 10 declarăm _motor obiect ca o instanță a SA_OAuthTwitterEngine clasă.

Acum treceți la TwitterRushViewController.m fişier. Importați SA_OAuthTwitterEngine clasa pe care tocmai am transmis-o declarată în interfața de clasă:

 #import "SA_OAuthTwitterEngine.h" 

Deoarece SA_OAuthTwitterControllerDelegate conține numai declarații opționale de metodă, în acest moment ar trebui să vă puteți compila și rula din nou aplicația fără erori sau avertismente.

Pasul 5: Definiți-vă acreditările pentru API-ul Twitter API

Pentru a obține accesul OAuth la API-ul Twitter, va trebui mai întâi să creați o cheie de consum și o cheie secretă pentru Twitter pentru a vă putea identifica și autentifica aplicația. Puteți face acest lucru de pe site-ul web Twitter, conectându-vă la contul dvs. și navigând la formularul de înregistrare a aplicației. Când treceți prin procesul de înregistrare, asigurați-vă că specificați "client" ca tip de aplicație, bifați caseta "Da, utilizați Twitter pentru conectare" și selectați "Read & Write" ca tip de acces implicit pentru a permite aplicației iPhone tweets în numele utilizatorilor dvs..

După ce v-ați înregistrat aplicația și Twitter a generat acreditările dvs. de aplicație, adăugați următoarele TwitterRushViewController.m deasupra clasei @implementation:

 #define kOAuthConsumerKey @ "Cheia dvs. de consum aici" / / REPLACE cu Twitter App OAuth Cheie #define kOAuthConsumerSecret @ "Secretul dvs. de consum aici" / / REPLACE cu Twitter App OAuth Secret 

Vom folosi aceste constante momentan când ne instanțiăm _motor obiect.

Pasul 6: Lansați ecranul de conectare Twitter

Pentru cazul nostru de utilizare, vrem să inițializăm _motor obiect atunci când ViewController nostru este creat și apoi afișa ecranul de autentificare Twitter OAuth de îndată ce controlerul de vizualizare termină încărcarea. Pentru a inițializa _motor obiect, modificați viewDidAppear metodă de citire după cum urmează:

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

Acum mergeți mai departe și eliberați-l _motor obiect în metoda dealloc a controlorului nostru de vedere:

 - (void) dealloc [release release]; [release tweetTextField]; [super dealloc];  

După ce vizualizarea noastră termină încărcarea, vrem să lansăm imediat ecranul de conectare Twitter. Pentru a face acest lucru, va trebui să modificați din nou viewDidAppear astfel:

 - (void) viewDidAppear: (BOOL) animat if (! _ engine) _engine = [[SA_OAuthTwitterEngine alocare] initOAuthWithDelegate: self]; _engine.consumerKey = kOAuthConsumerKey; _engine.consumerSecret = kOAuthConsumerSecret;  UIViewController * controller = [SA_OAuthTwitterController controlerToEnterCredentialsWithTwitterEngine: _engine delegate: self]; dacă (controler) [auto prezentModalViewController: controler animat: YES];  

Dacă rulați aplicația acum, veți vedea că prezentăm cu succes ecranul de conectare Twitter ori de câte ori este afișată vizualizarea personalizată. Cu toate acestea, există o problemă majoră cu această configurație: ecranul de conectare va fi afișat întotdeauna când apare afișarea, chiar dacă utilizatorul sa logat deja. Trebuie să adăugăm o condiție care va afișa acest control doar dacă utilizatorul nu a făcut încă conectat prin OAuth.

Pentru aceasta, adăugați următoarea condiție înainte de a afișa vizualizarea:

 dacă [! [motorul este autorizat]) UIViewController * controller = [SA_OAuthTwitterController controlerToEnterCredentialsWithTwitterEngine: delegat _engine: self]; dacă (controler) [auto prezentModalViewController: controler animat: YES];  

isAuthorized metoda va returna o valoare booleană a TRUE dacă avem un jeton de autentificare OAuth. Deci, această condiționalitate testează pur și simplu dacă noi nu face au autorizație și apoi afișează datele de conectare Twitter atunci când este necesar.

Pentru isAuthorized metoda de lucru, trebuie să adăugăm și următoarele SA_OAuthTwitterEngineDelegate metode de protocol responsabile pentru stocarea tokenului nostru de autentificare OAuth după prima conectare:

 // ================================================ ================================================== =========================== #pragma marca SA_OAuthTwitterEngineDelegate - (void) storeCachedTwitterOAuthData: (NSString *) date pentruUtilizator: (NSString *) username  NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; [implicit setObject: date pentruKey: @ "authData"]; [implicit sincronizați];  - (NSString *) cachedTwitterOAuthDataForUsername: (NSString *) numele de utilizator return [[NSUserDefaults standardUserDefaults] objectForKey: @ "authData"];  

Pasul 7: Postați actualizările pe Twitter

În ceea ce este probabil cel mai simplu pas al întregului proces, adăugați următoarea linie unică de cod updateTwitter, metoda noastră personalizată IBAction, pentru a posta de fapt o actualizare la Twitter:

 [_engine trimiteUpdate: tweetTextField.text]; 

Voila! Acum ar trebui să postați actualizări feed-ului dvs. Twitter. Cu toate acestea, nu suntem încă terminați. Ce se întâmplă dacă aplicația noastră nu reușește să publice actualizarea? Dacă am vrea să prezentăm o confirmare în cazul în care mesajul tweet este postat cu succes? Din fericire, TwitterEngineDelegate protocol are două metode definite pentru acest scop.

Adăugați următorul cod la TwitterRushViewController.m:

 // ================================================ ================================================== =========================== mark #pragma TwitterEngineDelegate - (void) requestSucceeded: (NSString *) requestIdentifier NSLog (@ "cerere% @ a reușit ", requestIdentifier);  - (void) requestFailed: (NSString *) requestIdentifier cu eroare: (NSError *) eroare NSLog (@ "Solicitare% @ eșuat cu eroare:% @", requestIdentifier, eroare);  

Puteți vedea că aplicația va înregistra acum mesaje de succes și de eșec la consola în funcție de ceea ce se întâmplă după ce facem clic pe butonul "Tweet". Acest comportament poate fi ușor modificat pentru a corespunde nevoilor propriilor aplicații.

Concluzie

Dacă ați urmat instrucțiunile pas cu pas de mai sus, acum ar trebui să puteți posta actualizări de stare pe Twitter în numele utilizatorilor dvs.!

În totalitate TwitterRushViewController.h fișierul ar trebui să arate astfel:

 #import  #import "SA_OAuthTwitterController.h" @ class SA_OAuthTwitterEngine; @ interfață TwitterRushViewController: UIViewController  IButlet UITextField * tweetTextField; SA_OAuthTwitterEngine * _engine;  @property (nonatomic, reține) IBOutlet UITextField * tweetTextField; - (IBAction) updateTwitter: (id) expeditor; @Sfârșit 

În totalitate TwitterRushViewController.m fișierul trebuie citit:

 #import "TwitterRushViewController.h" #import "SA_OAuthTwitterEngine.h" / * Definiți constantele de mai jos cu cheia Twitter și Secret pentru aplicația dvs. Creați acreditări Twitter OAuth prin înregistrarea cererii dumneavoastră ca un client OAuth aici: http://twitter.com/apps/new * / #define kOAuthConsumerKey @ "Cheia dvs. de aici" // Cu Twitter App REPLACE OAuth cheie #define kOAuthConsumerSecret @ "dvs. Secret aici "/ / REPLACE cu Twitter App OAuth Secret @implementare TwitterRushViewController @synthesize tweetTextField; #pragma marca Metode personalizate - (IBAction) updateTwitter: (id) expeditor // Dizpare tastatură [tweetTextField resignFirstResponder]; // Codul de integrare Twitter merge aici [_engine sendUpdate: tweetTextField.text];  Marca #pragma ViewController durata ciclului de viață - (void) viewDidAppear: (bool) // animat Twitter Inițializarea / Login Codul merge aici dacă (_ motor!) _Engine = [[SA_OAuthTwitterEngine aloc] initOAuthWithDelegate: auto]; _engine.consumerKey = kOAuthConsumerKey; _engine.consumerSecret = kOAuthConsumerSecret;  Dacă UIViewController * controler = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine: delegat _engine: auto] ([_ motor isAuthorized]!); dacă (controler) [auto prezentModalViewController: controler animat: YES];  - (void) viewDidUnload [tweetTextField release]; tweetTextField = zero;  - (void) a făcutReceiveMemoryWarning [super didReceiveMemoryWarning];  - (void) dealloc [release_engine]; [release tweetTextField]; [super dealloc];  // =============================================== ================================================== ============================ #pragma mark SA_OAuthTwitterEngineDelegate - (void) storeCachedTwitterOAuthData: (NSString *) forUsername date: (NSString *) Nume utilizator NSUserDefaults * implicit = [NSUserDefaults standardUserDefaults]; [implicit setObject: date pentruKey: @ "authData"]; [implicit sincronizați];  - (NSString *) cachedTwitterOAuthDataForUsername: (NSString *) numele de utilizator return [[NSUserDefaults standardUserDefaults] objectForKey: @ "authData"];  // =============================================== ================================================== ============================ mark #pragma TwitterEngineDelegate - (void) requestSucceeded: (NSString *) requestIdentifier NSLog (@ "cerere% @ reușit ", requestIdentifier);  - (void) requestFailed: (NSString *) requestIdentifier cu eroare: (NSError *) eroare NSLog (@ "Solicitare% @ eșuat cu eroare:% @", requestIdentifier, eroare);  @Sfârșit 

Vă mulțumim pentru că ați citit acest tutorial pe biblioteca Twitter-OAuth-iPhone și vă mulțumesc foarte mult lui Ben Gottlieb, lui Matt Gemmell, lui Jon Crosby, lui Chris Kimpton și lui Isaiah Carew. Fără munca lor grea, implementarea API-ului Twitter cu SDK-ul iPhone ar lua mai mulți, mai mulți pași pentru a fi realizați.

Aveți întrebări sau comentarii despre acest tutorial? Lăsați-le în secțiunea de comentarii de mai jos sau mesaj @ markhammonds direct pe twitter. Puncte bonus pentru completarea acestui tutorial și utilizarea aplicației TwitterRush pentru a-mi trimite un strigăt!

Cod