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.
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:
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.
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.
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.
Î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!
Î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.
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.
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.
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"];
Î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.
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!