Denne opplæringen vil vise deg hvordan du raskt kan integrere Twitter API med iPhone SDK ved hjelp av Twitter-OAuth-iPhone, et plug-and-play Twitter-bibliotek for iPhone som består av flere open source-prosjekter kombinert og syntetisert for enkel implementering av Ben Gottlieb.
Visse aspekter av applikasjoner eller teknikker som brukes i denne opplæringen, har endret seg siden den ble opprinnelig publisert. Dette kan gjøre det litt vanskelig å følge med. Vi anbefaler å se på disse nyere opplæringsprogrammene på samme emne:
MERK: Med utgivelsen av iOS 5 er denne artikkelen nå utdatert. Fortsett, bør du vurdere å bruke Twitter Framework som leveres med iOS 5 SDK. Bare vurder å implementere løsningen som er demonstrert her hvis du må støtte brukere på eldre versjoner av iOS.
Denne opplæringen vil bruke et enkelt program kalt "TwitterRush" for å demonstrere Twitter OAuth-integrasjon for iPhone. Ved å laste ned TwitterRush-applikasjonen, vil du kunne følge alle trinnene i denne opplæringen nøyaktig. Men hvis du allerede har et iPhone-prosjekt som du vil koble til med Twitter API, bør du fortsatt kunne følge med i din egen kode med bare små endringer.
I tillegg til TwitterRush eller ditt eget prosjekt, må du også laste ned Ben Gottliebs Twitter-OAuth-iPhone-prosjekt tilgjengelig på GitHub.
Etter å ha lastet ned og unarchiving Twitter-OAuth-iPhone-biblioteket, drar du mappen "Twitter + OAuth" i mappen "Andre kilder" i Xcode 4-navigatorområdet. Pass på å sjekke "Kopier elementer i destinasjonsgruppens mappe (hvis nødvendig)" og klikk "Fullfør".
Å forsøke å kompilere og kjøre din søknad nå, vil resultere i mange feil (90 på tidspunktet for denne skrivingen med iOS SDK 4). Ikke bekymre deg: vi vil enkelt fikse alle dem i trinn 2.
I navigatorområdet til Xcode 4 velger du prosjektnavnet (i dette tilfellet "TwitterRush"). Deretter velger du det nåværende målet ("TwitterRush" her igjen), og velg deretter "Bygg faser" -fanen. Utvid alternativet "Link binære med biblioteker", og klikk deretter "+" -knappen for å legge til et nytt rammeverk. Skriv "libxml2" i søkeboksen, og velg libxml2.dylib bibliotek som vises i listen. Klikk på "Legg til" for å inkludere dette biblioteket i koblingsfasen av prosjektet.
Etter å ha fullført disse trinnene, bør skjermen se slik ut:
Når du har lagt til biblioteket i prosjektet ditt, må du endre innstillingene for "header søkebaner" i prosjektets bygginnstillinger. For å gjøre dette, fjerner du målet og velger det faktiske TwitterRush-prosjektet. Åpne kategorien "Bygg innstillinger" og søk etter "Header Search Paths" -oppføringen. Dobbeltklikk denne innstillingen og klikk deretter "+" -knappen nederst til venstre i popup-dialogboksen for å legge til en ny søkebane. Klikk avkrysningsboksen "Rekursiv", dobbeltklikk feltet "Sti" og skriv inn følgende dynamiske sti:
$ (SDKROOT) / usr / include / libxml2
Etter å ha klikket på "Ferdig", ser skjermen ut som dette:
Hvis du kjører programmet fra Xcode menulinjen, bør du nå kunne bygge programmet uten kompileringsfeil!
Mens du nå kan kompilere og kjøre programmet uten feil, er det en rekke advarsler knyttet til endringer i iOS4 SDK og NSXMLParserDelegate-protokollen. Du må eksplisitt erklære det MGTwitterStatusesParser.h og MGTwitterXMLParser.h i samsvar med denne protokollen for å forhindre at disse advarslene oppstår.
For å gjøre det, åpne MGTwitterStatusesParser.h fil og endre @interface
erklæring ved å erklære NSXMLParserDelegate
protokoll som så:
@interface MGTwitterStatusesParser: MGTwitterXMLParser
Gjør det samme for MGTwitterXMLParser.h, modifisere @interface
erklæring for å lese:
@interface MGTwitterXMLParser: NSObject
Nå bør du kunne kompilere programmet uten å generere feil eller advarsler! Vi er nå klar til å begynne å integrere Twitter-OAuth-iPhone-biblioteket med vår kode.
Vi må nå begynne å importere biblioteksklassene som vi skal bruke for å koble til Twitter API. Åpen TwitterRushViewController.h og endre koden for å lese som følger:
#importere#import "SA_OAuthTwitterController.h" @class SA_OAuthTwitterEngine; @interface TwitterRushViewController: UIViewController IBOutlet UITextField * tweetTextField; SA_OAuthTwitterEngine * _engine; @property (nonatomic, behold) IBOutlet UITextField * tweetTextField; - (IBAction) updateTwitter: (id) sender; @slutt
På linje 2 importerer vi SA_OAuthTwitterController
klasse for bruk i vår visningskontroller. På linje 4, videresender vi SA_OAuthTwitterEngine
klasse slik at vi kan erklære en forekomst av den klassen i @interface
uten å faktisk importere topptekstfilen. På linje 6 erklærer vi SA_OAuthTwitterControllerDelegate
protokoll-dette vil tillate oss å enkelt reagere på Twitter API-hendelser senere. Til slutt, på linje 10 erklærer vi _motor
objekt som en forekomst av SA_OAuthTwitterEngine
klasse.
Bytt nå til TwitterRushViewController.m fil. Importer SA_OAuthTwitterEngine
klasse som vi fremdeles erklæres i klassegrensesnittet:
#import "SA_OAuthTwitterEngine.h"
Fordi det SA_OAuthTwitterControllerDelegate
inneholder bare valgfrie metoden deklarasjoner, på dette tidspunktet bør du igjen kunne kompilere og kjøre programmet uten feil eller advarsler.
For å få OAuth tilgang til Twitter API, må du først opprette en forbrukernøkkel og en hemmelig nøkkel for Twitter for å kunne identifisere og godkjenne søknaden din. Du kan gjøre dette fra Twitter-nettstedet ved å logge deg på kontoen din og navigere til app-registreringsskjemaet. Når du går gjennom registreringsprosessen, må du passe på å spesifisere "klient" som søknadstype, sjekk "Ja, bruk Twitter for pålogging" -boksen, og velg "Les og skriv" som standard tilgangstype for å aktivere iPhone-appen din til å legge inn tweets på vegne av brukerne dine.
Etter at du har registrert søknaden din og Twitter har generert søknadsinformasjon, legger du til følgende i TwitterRushViewController.m over klassen @gjennomføring
:
#define kOAuthConsumerKey @ "Din forbruksnøkkel her" // SKIFT MED Twitter App OAuth Key #define kOAuthConsumerSecret @ "Din forbrukerhemmelig her" // SKIFT MED Twitter App OAuth Secret
Vi vil bruke disse konstantene øyeblikkelig når vi instanser vår _motor
gjenstand.
For vårt brukstilfelle vil vi initialisere _motor
objekt når vår ViewController er opprettet og så vise Twitter OAuth login-skjermen så snart visningskontrolleren fullfører lasting. For å initialisere _motor
objekt, modifiser viewDidAppear
metode for å lese som følger:
- (void) viewDidAppear: (BOOL) animert hvis (! _ motor) _engine = [[SA_OAuthTwitterEngine alloc] initOAuthWithDelegate: self]; _engine.consumerKey = kOAuthConsumerKey; _engine.consumerSecret = kOAuthConsumerSecret;
Gå nå og slipp ut _motor
objekt i vår visning kontrollantens dealloc metode:
- (void) dealloc [_engine release]; [tweetTextField release]; [super dealloc];
Etter at visningen er fullført, vil vi umiddelbart starte Twitter-innloggingsskjermen. For å gjøre det, må du igjen endre viewDidAppear
metode slik:
- (void) viewDidAppear: (BOOL) animert hvis (! _ motor) _engine = [[SA_OAuthTwitterEngine alloc] initOAuthWithDelegate: self]; _engine.consumerKey = kOAuthConsumerKey; _engine.consumerSecret = kOAuthConsumerSecret; UIViewController * controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine: _engine delegate: self]; hvis (controller) [selvtillitModalViewController: controller animert: YES];
Hvis du kjører programmet nå, ser du at vi presenterer Twitter-innloggingsskjermen med hell når vår tilpassede visning vises. Det er imidlertid ett stort problem med dette oppsettet: påloggingsskjermen vil alltid vises når visningen vises, selv om brukeren allerede har logget inn. Vi må legge til en betinget at denne kun vil vise denne kontrollen hvis brukeren ikke har vært koblet via OAuth.
For å gjøre dette, legg til følgende betinget før visningen vises:
hvis (! [_ engine isAuthorized]) UIViewController * controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine: _engine delegate: self]; hvis (controller) [selvtillitModalViewController: controller animert: YES];
De isAuthorized
Metoden vil returnere en boolsk verdi av SANT hvis vi har et OAuth-godkjennings-token. Så, dette betinget bare tester om vi ikke ha autorisasjon, og viser deretter Twitter-login når det trengs.
For isAuthorized
metode for arbeid, vi må også legge til følgende SA_OAuthTwitterEngineDelegate
protokollmetoder som er ansvarlige for lagring av OAuth-autentiseringstoken vår etter den første påloggingen:
// ================================================ ================================================== ====================pragma markere SA_OAuthTwitterEngineDelegate - (void) storeCachedTwitterOAuthData: (NSString *) data forUsername: (NSString *) brukernavn NSUserDefaults * standard = [NSUserDefaults standardUserDefaults]; [standard settObject: data forKey: @ "authData"]; [standard synkronisere]; - (NSString *) cachedTwitterOAuthDataForUsername: (NSString *) brukernavn retur [[NSUserDefaults standardUserDefaults] objectForKey: @ "authData"];
I det som er kanskje det enkleste trinnet i hele prosessen, legg til følgende enkelt linje med kode til updateTwitter
, vår tilpassede IBAction-metode, for å faktisk legge inn en oppdatering til Twitter:
[_engine sendUpdate: tweetTextField.text];
Voila! Du bør nå legge inn oppdateringer til ditt Twitter-feed. Vi er imidlertid ikke helt ferdige ennå. Hva skjer hvis programmet ikke sender oppdateringen? Hva om vi ønsket å presentere en bekreftelsesvisning hvis tweetet ble lagt ut? Heldigvis, TwitterEngineDelegate
protokollen har to metoder definert for bare denne hensikten.
Legg til følgende kode til TwitterRushViewController.m
:
// ================================================ ================================================== =================== #pragma mark TwitterEngineDelegate - (void) requestSucceeded: (NSString *) requestIdentifier NSLog (@ "Request% @ lyktes ", requestIdentifier); - (ugyldig) requestFailed: (NSString *) requestIdentifier withError: (NSError *) feil NSLog (@ "Request% @ mislyktes med feil:% @", requestIdentifier, error);
Du kan se at applikasjonen nå logger suksess og feilmeldinger til konsollen avhengig av hva som skjer når vi klikker på "Tweet" -knappen. Denne oppførselen kan enkelt endres for å matche behovene til dine egne apper.
Hvis du har fulgt trinnvise instruksjonene ovenfor, bør du nå kunne legge inn statusoppdateringer til Twitter på vegne av brukerne!
Den fulle TwitterRushViewController.h
filen skal nå se slik ut:
#importere#import "SA_OAuthTwitterController.h" @class SA_OAuthTwitterEngine; @interface TwitterRushViewController: UIViewController IBOutlet UITextField * tweetTextField; SA_OAuthTwitterEngine * _engine; @property (nonatomic, behold) IBOutlet UITextField * tweetTextField; - (IBAction) updateTwitter: (id) sender; @slutt
Den fulle TwitterRushViewController.m
filen bør lese:
#import "TwitterRushViewController.h" #import "SA_OAuthTwitterEngine.h" / * Definer konstanterne nedenfor med Twitter-nøkkelen og hemmelig for søknaden din. Opprett Twitter OAuth-legitimasjon ved å registrere din søknad som OAuth-klient her: http://twitter.com/apps/new * / #define kOAuthConsumerKey @ "Din nøkkel her" // SKIFT MED Twitter App OAuth Key #define kOAuthConsumerSecret @ "Din Hemmelighet her "// SKIFT MED Twitter App OAuth Secret @ implementering TwitterRushViewController @synthesize tweetTextField; #pragma markere Tilpassede metoder - (IBAction) updateTwitter: (id) avsender // Dismiss Keyboard [tweetTextField resignFirstResponder]; // Twitter Integration Code Går her [_engine sendUpdate: tweetTextField.text]; #pragma mark ViewController Lifecycle - (void) viewDidAppear: (BOOL) animert // Twitter Initialization / Login Code Går her hvis (! _ engine) _engine = [[SA_OAuthTwitterEngine alloc] initOAuthWithDelegate: self]; _engine.consumerKey = kOAuthConsumerKey; _engine.consumerSecret = kOAuthConsumerSecret; hvis (! [_ engine isAuthorized]) UIViewController * controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine: _engine delegate: self]; hvis (controller) [selvtillitModalViewController: controller animert: YES]; - (void) viewDidUnload [tweetTextField release]; tweetTextField = nil; - (void) didReceiveMemoryWarning [super didReceiveMemoryWarning]; - (void) dealloc [_engine release]; [tweetTextField release]; [super dealloc]; // ================================================= ================================================== =====================&pragma markere SA_OAuthTwitterEngineDelegate - (void) storeCachedTwitterOAuthData: (NSString *) data forUsername: (NSString *) brukernavn NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; [standard settObject: data forKey: @ "authData"]; [standard synkronisere]; - (NSString *) cachedTwitterOAuthDataForUsername: (NSString *) brukernavn retur [[NSUserDefaults standardUserDefaults] objectForKey: @ "authData"]; // ================================================= ================================================== ==================== #pragma mark TwitterEngineDelegate - (void) requestSucceeded: (NSString *) requestIdentifier NSLog (@ "Request% @ lyktes ", requestIdentifier); - (ugyldig) requestFailed: (NSString *) requestIdentifier withError: (NSError *) feil NSLog (@ "Request% @ mislyktes med feil:% @", requestIdentifier, error); @slutt
Takk for at du leser denne veiledningen på Twitter-OAuth-iPhone-biblioteket, og en veldig spesiell takk til Ben Gottlieb, Matt Gemmell, Jon Crosby, Chris Kimpton og Isaiah Carew. Uten deres harde arbeid, ville implementering av Twitter API med iPhone SDK ta mange, mange flere skritt for å oppnå.
Har du spørsmål eller kommentarer til denne opplæringen? La dem stå i kommentarfeltet nedenfor eller melding @markhammonds direkte på twitter. Bonuspoeng for å fullføre denne opplæringen og bruke TwitterRush-applikasjonen for å sende meg en rop ut!