Bygg en iOS SDK Poke App med APNS - Del 2

Denne opplæringen er den andre i en tre-delt serie om å jobbe med push-varslingsfunksjonene i iOS 3.0 +. Det fokuserer på hvordan du sender meldinger til Apples Push Notification Service (APNS) via Urban Airship. Denne avgiften bygger på de tingene vi har satt opp i den siste, så du vil gå og lese gjennom den første for å få fart hvis du ikke allerede har.

Forbered SSL-sertifikatene dine

SSL-sertifikatfilen du lastet ned fra IOS Provisioning Portal i del 1 av denne serien er i DER-format og inneholder bare sertifikatet - det inneholder ikke din private nøkkel. Urban Airship trenger imidlertid både SSL-sertifikatet og private nøkkelen lastet opp i en enkelt PKCS # 12-fil for å kunne kommunisere korrekt med Apple Push Notification Service. Så, vi har litt arbeid å gjøre. Heldig for oss, verktøyet Nøkkelringstilgang gjør egentlig stort sett alt for oss med bare noen få museklikk.

Det første du må gjøre, hvis du ikke allerede har gjort det, er å dobbeltklikke på det nedlastede sertifikatet (det skal bli kalt aps_developer_identity.cer) i Finder og klikk "Legg til" for å legge det til nøkkelringen din. Merk: Du må legge til sertifikatet til samme nøkkelring som inneholder de offentlige og private nøklene generert av sertifikat-signeringsforespørselen i forrige avdrag.

Når sertifikatet er lagt til nøkkelringen din, velg "Mine sertifikater" fra kategorilisten til venstre og finn ditt nylig lagt til sertifikat. Kontroller at den har en trekant ved utgivelsen ved siden av den. Hvis det ikke betyr det, betyr det at nøkkelringstilgang ikke kan finne den private nøkkelen som samsvarer med sertifikatet i nåværende nøkkelring - sørg for at du la sertifikatet til riktig nøkkelring.

Høyreklikk på sertifikatet og velg "Exporter" Apple Development Push Services [identifiserer] "..." Når eksportarket vises, kontrollerer du at "Personlig informasjonsutveksling (.p12) er valgt fra popup-knappen for filformat. Gi filen din god navn og trykk "Lagre".

En melding vises, og ber om et passord for filen. Selv om Urban Airship støtter passordbeskyttede PKCS # 12-filer, anbefales det å la det stå tomt - bare trykk "OK".

Se, det var ikke så vanskelig! Nå er vi klare til å gå over til Urban Airship og sette alt opp.

Urban Airship

Som nevnt i forrige avtale bruker vi Urban Airship til å kommunisere med Apple Push Notification Service og sende push til vår demo-app.

1. Opprett en konto

For å begynne å bruke Urban Airship-tjenesten må du opprette en konto hos dem. Deres indieplan gir deg en million meldinger / måned gratis (av denne skrivingen). Fyll ut skjemaet og klikk på "Registrer deg". Deretter klikker du URL-adressen i bekreftelses-eposten som er sendt for å aktivere kontoen din.

2. Legg til en ny app i kontoen din

Når du er logget på, gå til "Legg til et nytt program" skjema og skriv inn programmets navn. Som nevnt tidligere bruker Apple to separate grupper av push-servere for utvikling og produksjon - hver krever at du oppretter et separat SSL-sertifikat i provisjonsportalen. På grunn av dette anbefaler Urban Airship at du lager egne applikasjoner på slutten deres for utvikling og produksjon. På den måten kan du fortsette å teste ut varsler under utvikling uten å forstyrre push-tjenester til brukerne som har lastet ned appen din fra App Store.

Fordi vi jobber med en utviklingsbygg av vår app, bruker vi vårt utviklings SSL-sertifikat. Programmodus må settes til "Utvikling - tilkobling til testservere." tilsvarende.

Merk av i boksen som sier "Push Notifications Support" og en rekke nye felt skal legges til skjemaet. De eneste feltene vi vil være bekymret for er de tre under "Apple" -overskriften. Klikk på "Velg fil" -knappen og finn PKCS # 12-filen du tidligere eksporterte fra Nøkkelringstilgang. Hvis du bestemte deg for å skrive inn et passord for filen, tapp det inn i boksen "Sertifikatpassord". Vi bør også sjekke "Push debug mode" -boksen for å hjelpe oss med å feilsøke eventuelle problemer. (Den nysgjerrige kan klikke på linken for å lære mer om hva det er og hva det gjør).

Med all informasjon du har oppgitt, klikker du på "Opprett appen din."

3. App-legitimasjon

Når appen din er opprettet, bør du bli omdirigert til appens detaljeringsside.

De to tingene jeg vil ringe ut før vi går videre til API-en, er Application Key og Application Secret. For en forklaring av begge, refererer jeg deg til Urban Airships dokumentasjon:

Hver applikasjon har en applikasjonsnøkkel og både en applikasjonshemmelig og en applikasjonshemmelig hemmelighet (tidligere kjent som Application Push Secret). Referanser leveres i HTTP Basic Auth (med nøkkel som brukernavn og hemmelighet som passord), alltid over vår HTTPS-tilkobling. Programhemmeligheten skal inkluderes i søknaden for å utføre registrering, og masterhemmeligheten skal kun brukes på en ekstern server og ikke inkludert i søknaden.

I utgangspunktet bruker vi applikasjonsnøkkelen og hemmelig som brukernavn og passord, når de kommuniserer med Urban Airship API fra Appen vår. Med det for øye, la oss raskt dekke enhetens registreringsanrop av API.

4. Enhetsregistrering API

Hvis du ruller ned API-dokumentasjonen siden vi bare så på, er det første elementet du møter registreringsdelen. Les raskt de første fire avsnittene, og du vil se at vi må sende en HTTP PUT-forespørsel til https://go.urbanairship.com/api/device_tokens/ for å registrere en enhet.

La oss gå tilbake til vårt Xcode-prosjekt og legge til noe kode for å gjøre vår app gjøre nettopp det!

Tilbake til appen

Hvis den ikke er åpen allerede, åpner du Xcode-prosjektet som vi opprettet i første del av denne serien.

Enhetsregistrering

Det første vi trenger å gjøre er å få vår app passet token vi mottok fra APNS tilbake til Urban Airship. Hvis du husker fra første del, har vi lagt til en tilbakemeldingsmetode for push notification til vår appdelegate som så slik ut:

- (ugyldig) søknad: (UIApplication *) søknad didRegisterForRemoteNotificationsWithDeviceToken: (NSData *) deviceToken // TODO: Pass token til serveren vår NSLog (@ "Vi har registrert deg for push notifications"); 

Nå skal vi implementere TODO-elementet.

Hvis du ser på tilbakeringingsmetoden ovenfor, vil du legge merke til at enhetstokenet kommer tilbake som en forekomst av NSData og ikke NSString. Hvis du ser opp tilbakekallingsmetoden i Apples dokumentasjon, vil du se hvorfor:

Tildelen er en ugjennomsiktig datatype fordi det er skjemaet som leverandøren må sende til APS-serverne når det sender et varsel til en enhet. APS-serverne krever et binært format for ytelsesårsaker.

Hva betyr alt dette? Urban Airship trenger token som en heksadesimal streng, men operativsystemet håndterer det som rå data, så vi må gjøre noe om å konvertere. Selv om det uten tvil ikke er den beste måten å gjøre dette på, skal vi bruke NSData's -beskrivelsesmetode for å konvertere dataene til en heksadesimal streng:

 // Konverter token til en hex streng og sørg for at det er alle caps NSMutableString * tokenString = [NSMutableString stringWithString: [[deviceToken description] uppercaseString]]; [tokenString replaceOccurrencesOfString: @ "<" withString:@"" options:0 range:NSMakeRange(0, tokenString.length)]; [tokenString replaceOccurrencesOfString:@">"withString: @" "alternativer: 0 rekkevidde: NSMakeRange (0, tokenString.length)]; [tokenString replaceOccurrencesOfString: @" "withString: @" "alternativer: 0 rekkevidde: NSMakeRange (0, tokenString.length)];

Deretter må vi bygge URL-adressen, som beskrevet i API-dokumentasjonen:

 // Opprett NSURL for forespørselen NSString * urlFormat = @ "https://go.urbanairship.com/api/device_tokens/%@"; NSURL * registrationURL = [NSURL URLWithString: [NSString stringWithFormat: urlFormat, tokenString]];

Vi må da instansere en NSMutableURLRequest. Vi bruker en foranderlig forespørsel fordi vi må endre HTTP-metoden i forespørselen til PUT.

 // Opprett registreringsforespørselen NSMutableURLRequest * registrationRequest = [[NSMutableURLRequest alloc] initWithURL: registrationURL]; [registrationRequest setHTTPMethod: @ "PUT"];

Til slutt må vi opprette en forekomst av NSURLConnection for å faktisk sende dataene til serveren:

 // Og brann den av NSURLConnection * connection = [NSURLConnection connectionWithRequest: registrationRequest delegate: self]; [tilkoblingsstart];

Du vil legge merke til at vi setter tilkoblingens delegat til meg selv. Fordi NSURLRequest ikke har innebygd støtte for å gi HTTP Basic Authentication-legitimasjon på forhånd (uten å dyppe ned i base 64-koding), vil vi vite når forbindelsen mottar en autentiseringsutfordring, slik at vi kan gi brukernavn og passord. NSURLConnection har en delegert metode -kobling: didReceiveAuthenticationChallenge: som vi nå må implementere også.

- (NSURLConnection *) tilkobling didReceiveAuthenticationChallenge: (NSURLAuthenticationChallenge *) utfordring // Se etter tidligere feil hvis ([utfordring previousFailureCount]> 0) // Vi har allerede prøvd - noe er galt med vår legitimasjon NSLog ( @ "Urban Airship-legitimasjon er ugyldig"); komme tilbake;  // Send våre Airship-legitimasjonsbeskrivelser NSURLCredential * airshipCredentials = [NSURLCredent credentialWithUser: @ "" passord:@""utholdenhet: NSURLCredentialPersistenceNone]; [[utfordrer avsender] useCredential: airshipCredentials forAuthenticationChallenge: challenge];

Husk å skrive inn din Urban Airship-søknadstast og hemmelighet der det er angitt. Du kan hente dem fra appens detaljinformasjon.

Du bør også implementere andre NSURLConnection delegatemetoder, for eksempel -kobling: didFailWithError: and -connection: didReceiveResponse :, hvorav det andre du kan bruke til å verifisere svarkoden mot den forventede som er oppført i Urban Airship-dokumentasjonen. Men jeg la det som en øvelse for leseren.

Puh! OK, så vi har nå vår app som overfører push-token den mottar fra APNS til Urban Airship servere. Vi er nå klar til å installere appen på enheten vår, og prøv å sende noen varsler!

Installerer appen

Hvis du allerede har gått gjennom hele første del av serien, bør alt allerede være riktig konfigurert i Xcode for å bygge appen og installere den på iPhone.

Koble din iPhone til datamaskinen. Hvis dette er første gang du har gjort dette med Xcode open, bør det spørre om du vil bruke enheten til utvikling - hvis det gjør det, klikk "Ja". Gi det noen sekunder etter at du har plugget det inn for å være riktig gjenkjent av Xcode.

Kontroller at den aktive SDK er satt til "Enhet" i Oversikt-popup-vinduet og at den aktive konfigurasjonen er satt til "Feilsøking". Deretter treffer du den grønne "Build and Run" -knappen i verktøylinjen.

Innen noen få minutter bør Xcode bygge appen og installere den på iPhone. Pass på at du er koblet til et nettverk av noe slag og la appen kjøre i noen minutter, slik at det har tid til å registrere deg med APNS og sende enhetstoken til Urban Airship.

Hovedarrangementet

Etter to tutorials er vi endelig klar til å sende en push-melding til vår app!

Gå tilbake til Urban Airship nettside og logg inn (hvis du ikke er innlogget ennå). Naviger til appens side og velg "Statistikk" fra menyen til venstre.

Ved siden av "Device Tokens" til høyre, bør det være et nummer 1. Hvis det ikke er det, gå tilbake og kontroller at du skrev inn legitimasjonene dine riktig. Du vil kanskje også implementere flere av NSURLConnection-delegatemetodene for å bekrefte at forespørselen blir riktig mottatt av Urban Airship-servere.

Etter å ha bekreftet at enheten vår er riktig registrert, sender vi nå et trykk. Velg "Push Notifications" fra menyen til venstre, og velg deretter "Device Tokens" fra undermenyen. Til høyre skal en lang heksadesimal streng vises under "Enhets Token". Kopier denne strengen til utklippstavlen og velg deretter "Test Push Notifications" til venstre.

Pass på at du er på iOS-fanen, og lim inn enhetstoken i feltet Enhets token. Skriv inn litt tekst i feltet "Alert". Etter å ha bekreftet at appen din ikke kjører på telefonen, trykk "Send den!"

Innen noen få minutter skal varselet vises på telefonen. Gratulerer! Du har nettopp sendt ditt første pushvarsel! Gi meg beskjed i kommentarene hvis du har problemer med å få det til å fungere.

I den siste delen av denne serien vil vi utforske noen av de andre push-funksjonene som vises her, for eksempel merker og lyder, samt noen av de mer avanserte Urban Airship API-funksjonene.