Bygg en iOS SDK Poke App med APNS - Del 1

Denne opplæringen er den første i en tredelers serie om å jobbe med push-varslingsfunksjonene i iOS 3.0 +. Den vil dekke alt du trenger for å få push-varslinger som fungerer i appen din: registrerer deg for varsler, konfigurerer appen din i IOS-leveringsportalen, sender varsler til Apples Push Notification Service (APNS) og håndterer dem i appen din.

I denne opplæringen vil vi opprette en demo-app kalt Poke. Det vil tillate deg å "poke" brukere via push varslingsvarsler. Selv om det uten tvil ikke er en god bruk av tjenesten, vil denne opplæringen lære deg grunnleggende om hva du trenger å vite for å komme i gang.

1. Trykk oversikt

Mange stasjonære applikasjoner bruker bakgrunnsprosesser for å kontinuerlig gi brukerne oppdatert informasjon. Disse bakgrunnsapplikasjonene implementerer vanligvis en trekkdesign - de poller aktivt en server for endringer i deres data. Det er ikke uvanlig at flere av disse programmene kjører på datamaskinen din, kobler seg til en rekke tredjeparts servere.

Selv om dette ikke kan være et problem på en stasjonær maskin med mye ledig minne og prosessering gjennomstrømning og en uendelig strømforsyning, blir denne metoden raskt et problem på en mobil enhet med en mye mer begrenset mengde av alle tre.

Med push-varsler, introdusert i iOS 3.0, har Apple jobbet rundt disse begrensningene med en push-basert design. I stedet for å tvinge appen din til å forbli åpen og stadig spørre etter oppdateringer som i pull-modellen, lytter iOS i stedet i stedet for oppdateringer og gir beskjed om appen din når de ankommer. Resultatet er redusert prosessor-, minne- og batteriforbruk. I tillegg, i stedet for hver app som kobler til sin egen server, opprettholdes en enkelt vedvarende forbindelse mellom iOS-enheten og APNS-en.

Som angitt i diagrammet ovenfor, kobler du til tjeneren med push-varsler til APNS i stedet for sluttbrukerens enhet. Når data som en bestemt bruker er interessert i, sender serveren din en melding til APNS som vil varsle brukeren. Brukeren kan da bestemme hva han skal gjøre med den informasjonen (dvs. handle på det nå eller vent til senere).

Merk: Appen din må kanskje faktisk laste ned noen eller alle de endrede dataene fra serveren din, men forskjellen er at brukerens enhet ikke har bortkastet prosesseringssykluser, batterilevetid og nettverksbåndbredde, og spør serveren hvert 15. minutt om det er noe nytt. Vi kommer inn på flere detaljer om dette i et senere segment.

Push meldinger arbeid over alle nettverkstilkoblinger, og det er ingen ekstra kostnad (oppkrævet av Apple) for deg som utvikler å legge til denne flotte funksjonen i appene dine.

I de nylig utgitte retningslinjene for App Store har Apple lagt ut en rekke regler om tjenesten. De fleste er sunn fornuft, men du vil kanskje se på dem hvis du ikke allerede har det.

2. Arbeidsflyt og trykk krav

I et nøtteskall er dette den grunnleggende app-arbeidsflyten for push-varsler:

  1. Appen din sender inn en forespørsel til operativsystemet for å registrere seg for varsler.
  2. OS-en gir en sikker tilkobling til APNS, får tilbake enhetstoken, og overfører den til appen din. Legg merke til at dette symbolet av sikkerhetsmessige årsaker er ikke det samme som enhetsidentifikatoren (som hentet fra UIDevice's deviceIdentifier-egenskap). Hvis en brukerens fjernkontroll tørker sin tapt iPhone, for eksempel når enheten registrerer meldinger igjen, vil den motta et annet enhedstoken.
  3. Appen din sender dette token til serveren din, hvor den er lagret.
  4. Når du vil sende et trykkvarsel til en bestemt bruker, tar serveren din brukerens tokensett og sender den i en spesielt formatert nyttelast til APNS.
  5. APNS videresender meldingen til den aktuelle brukerens enhet.

Vi vil dekke hvert element på listen mens vi går gjennom denne serien.

Det er tre grunnleggende krav til Apple Push Notification Service:

En server

Som nevnt tidligere belaster Apple ikke utviklere for å bruke denne tjenesten. Tjenesten gir imidlertid ingen form for frontend fra hvilken du kan sende varsler - du må ha din egen server som kobles til Apples servere og sender pusher, og det kan være hosting og andre avgifter knyttet til prosessen.

En rekke tredjepartstjenester har skjæret opp for å løse dette problemet. Disse tjenestene fungerer som mellommann mellom deg og APNS - de håndterer konfigurering av SSL-tilkoblingen til APNS og viser vanligvis en API som du kan bruke for å enkelt sende push. Noen har selv en webfrontendat som du kan bruke til å sende meldinger raskt uten å måtte skrive en kode. I denne serien bruker vi Urban Airship, hovedsakelig på grunn av deres brukervennlige og gode priser.

Et SSL-sertifikat

Sertifikatet identifiserer appen din til tjenesten, og brukes til å etablere den sikre forbindelsen mellom serveren din og APNS. Disse sertifikatene genereres (gratis) i IOS Provisioning Portal, og instruksjoner om hvordan du gjør det er gitt nedenfor i trinn 5.

En riktig konfigurert profileringsprofil

Dette er også dekket i detalj i trinn 5 nedenfor. La oss grave inn.

3. Opprett et nytt iPhone-prosjekt i Xcode

Åpne Xcode og opprett et nytt iPhone-prosjekt. For denne opplæringen bruker vi den enkle "Vis-baserte applikasjon" -malen for iPhone og vil nevne prosjektet "Poke".

4. Registrer deg for push-varsler

Siden denne delen av opplæringen vil fokusere hovedsakelig på meldingene du får, vil vi ikke bruke noen tid på å konfigurere visningen vår for å vise noen form for nyttig informasjon enda. Vi henter det i tredje tredelingen. I stedet la vi hoppe rett inn i å registrere appen vår med Apple Push Notification Service.

For at appen din skal motta push-varsler, må den først fortelle Apple Push Notification Service hvilke typer meldinger den ønsker å motta. Appen din kan støtte enhver kombinasjon av følgende tre typer (oppført i rekkefølge minst til mest påtrengende):

  • merker - viser et lite tall i en rød sirkel på toppen av appikonet ditt (som i appene for app og e-postbutikk nedenfor):
  • lyder - Spiller enten standard systemlyd (som hørt når en SMS kommer) eller din egen merkede lyd. Hvis du skal bruke din egen lyd, må den inkluderes i apppakken din og må være i ett av følgende format:
    • Lineær PCM
    • MA4
    • μLaw
    • en lov
  • varsler - viser en UIAlertView med meldingen din:

    Fordi varsler tvinge brukeren til å stoppe hva han gjør for å samhandle med dem, anbefaler Apple sterkt at de brukes sparsomt. Ikke misbruk brukerne dine med varsler (eller noen form for push-melding, for det saks skyld) - de vil enten deaktivere push notifications til appen din eller bare slette appen din helt og holdent.

For denne delen av opplæringen vil vi fokusere på varsler. I siste avdrag vil vi komme tilbake og eksperimentere med de to andre.

La oss gå videre og informere iOS om at vår app vil motta varslingsvarsler.

Åpne opp PokeAppDelegate.m (eller hva appdelegenten din heter), og oppdatere programmet: didFinishLaunchingWithOptions: tilbakeringing for å se slik ut:

- (BOOL) søknad: (UIApplication *) søknad didFinishLaunchingWithOptions: (NSDictionary *) launchOptions // Register for alert notifications [søknadsregisterForRemoteNotificationTypes: UIRemoteNotificationTypeAlert]; // Legg til visningskontrollørens visning til vinduet og skjermen. [window addSubview: viewController.view]; [window makeKeyAndVisible]; returnere JA; 

Vær oppmerksom på at vi bare sender UIRemoteNotificationTypeAlert, fordi alt vi ønsker å motta akkurat nå, er varsler. Hvis du vil motta andre varsler, fortsett og legg til dem med bitvis eller:

[...] Typer: UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge];

Med disse endringene til vår appdelegate begynner operativsystemet å registrere seg hos Apple Push Notification Service. Hvis det lykkes, vil det sende et søknad: didRegisterForRemoteNotificationsWithDeviceToken: melding til app-delegaten din med enhetstokenet; Hvis det mislykkes, vil det sende et søknad: didFailToRegisterForRemoteNotificationsWithError: melding. Ideelt sett bør du implementere begge deler.

Legg til følgende to metoder for appens delegat for å håndtere de to mulige resultatene for registrering:

- (ugyldig) søknad: (UIApplication *) søknad didRegisterForRemoteNotificationsWithDeviceToken: (NSData *) deviceToken // TODO: Pass token til serveren vår NSLog (@ "Vi har registrert deg for push notifications");  - (ugyldig) søknad: (UIApplication *) søknad didFailToRegisterForRemoteNotificationsWithError: (NSError *) feil // Informer brukeren om at registrering mislyktes NSString * failureMessage = @ "Det oppstod en feil under forsøk på \ registrere for push notifications."; UIAlertView * failureAlert = [[UIAlertView allok] initWithTitle: @ "Feil" melding: failureMessage delegate: null annullerButtonTitle: @ "OK" otherButtonTitles: null]; [failureAlert show]; [failureAlert release]; 

Vi kommer tilbake til suksess tilbakeringingen i et senere segment - for øyeblikket logger det bare en rask melding. Vår feiloppringing informerer brukeren om feilen. Merk at registreringen vil alltid mislykkes på iPhone Simulator, da det ikke støtter push notifications. For å teste koden riktig må du bruke en faktisk enhet.

5. Konfigurer appen din i IOS Provisioning Portal

Nå som vi har en grunnleggende app opprettet på slutten, la vi gå over til Apples side av ting og få alt satt opp i IOS Provisioning Portal.

Hvis du allerede er et betalende medlem av iOS Developer Program, logger du på iOS Dev Center og klikker koblingen til høyre for å gå til IOS Provisioning Portal. Hvis du ikke er medlem, kan du registrere deg for $ 99 her.

Det første du må gjøre, er å sørge for at du allerede har konfigurert kontoen din med de nødvendige utvikler sertifikatene, og har lagt til enhetene dine. Instruksjoner for å gjøre dette er utenfor omfanget av denne opplæringen, men Apple gir en oppsettassistent samt videoer og andre ressurser for å gå gjennom prosessen. Ta en titt på "Hjem" delen av portalen for mer info.

Det neste trinnet er å opprette en ny app-ID. For å kunne knytte ordene riktig til tjenesten med et bestemt program, gjør Apple Push Notification Service ikke støtte apper med en "wildcard" bundleidentifikator (dvs. en identifikator med en etterfølgende stjerne, for eksempel com.acme. *). Årsaken er at push-tjenesten må kunne identifisere den spesifikke appen som pushen tilhører, men wildcard-identifikatorer tillater deg å bygge flere apper med samme provisjonsprofil. Så hvis du allerede har en jokertegnidentifikator satt opp for utvikling, må du opprette en ny for denne appen for å aktivere push notification support. Hvis app-ID-en din ikke bruker en jokertegn-ID, kan du hoppe over dette trinnet.

Klikk på knappen "Ny app ID" øverst til høyre. Fyll ut appens informasjon og klikk på "Send" -knappen.

Finn din nyopprettede (eller allerede eksisterende) App ID i listen og klikk på "Konfigurer" -linken til høyre. På siden som kommer opp, sjekk "Aktiver for Apple Push Notification service."

Hvis "Aktiver for Apple Push Notification service" ikke vises, er App-ID-en din trolig ikke konfigurert riktig. Gå tilbake til forrige trinn, og kontroller at du ikke har oppgitt en jokertegn-ID.

Du vil legge merke til at det er to sertifikater oppført - en for utvikling og den andre for produksjon. APNS har testservere og liveproduksjonsservere. Hver bruker og krever et annet SSL-sertifikat fra klienten. Testservere kan brukes til å sende pushes til apper som er bygget med utviklingsprovisjonsprofiler; Produktionsserverne kan brukes til å sende push til apper som er bygget med distribusjonsprovisjonsprofiler (Ad Hoc, In House eller App Store bygger).

For nå trenger vi ikke å bekymre oss for mye om forskjellen, men dette vil komme til spill i neste avdrag når vi begynner å sette opp vår konto hos Urban Airship.

Som vi for tiden skal jobbe med en utviklingsbygg av vår app, klikker du på "Konfigurer" -knappen for Development Push SSL-sertifikatet. Følg instruksjonene i boksen som ser ut til å opprette en underskriftsforespørsel om sertifikat, og klikk deretter på Fortsett.

Velg din nylig genererte CSR ved å klikke "Velg fil", og klikk deretter "Generer" for å generere SSL-sertifikatet.

Du bør se en fremdriftsmåler og deretter følgende bekreftelse:

Klikk på "Fortsett", og du vil bli tatt til nedlasting og installering. Vi kommer inn på hva vi skal gjøre med dette sertifikatet i den andre delen av denne opplæringen, men nå går du videre og klikker "Last ned" for å laste ned det nye APNS-klientens SSL-sertifikat.

Deretter må vi opprette en provisjonsprofil for vår nye (eller eksisterende, ikke-jokertegn) App ID.

Merk: Hvis du allerede har opprettet en provisjonsprofil for den eksisterende app-IDen din, følger du med Apples lokale og pressemeldingsveiledning i forkant For å aktivere pushvarsler for den IDen må du endre profilen på en eller annen måte (dvs. endre navnet) slik at portalen vil regenerere den med de nødvendige pushrettighetene.

Du kan bekrefte at en profil har de riktige pushrettighetene ved å åpne den i en tekstredigerer. Det bør ha en aps-miljønøkkel:

Tilbake i IOS Provisioning Portal, velg "Levering" fra hovedmenyen til venstre. Klikk kategorien "Utvikling" og velg "Ny profil" -knappen. Skriv inn et beskrivende navn i feltet Profilnavn og velg sertifikatene for utviklerne som kan bruke denne profilen til å bygge apper. Hvis du registrerte deg som en person, vil bare ett sertifikat bli oppført (din); Hvis du har registrert deg som et selskap, kan det være flere enn en liste.

Velg App-IDen du opprettet i det tidligere trinnet (eller din eksisterende) fra App ID-listen, og velg de enhetene du vil teste appen din på fra listen nederst. Deretter klikker du på "Send" for å generere den nye provisjonsprofilen.

Etter noen minutter vil din profil bli utstedt, og en "Last ned" -knapp vil vises i kolonnen Handlinger til høyre (Du må kanskje oppdatere nettleseren din). Når det er gjort, klikker du på det for å laste ned den nye utviklingsprofilen din.

For å installere profilen din, dra den nylig lastede .mobilprovisjonsfilen til Xcode eller iTunes i Dock.

6. Konfigurer appen din for å bruke den nye provisjonsprofilen

Gå tilbake til prosjektet ditt i Xcode.

Velg "Rediger aktivt mål" Poke "" fra Prosjekt-menyen. Naviger til fanen Egenskaper og skriv inn pakkeidentifikatoren du har konfigurert i IOS-leveringsportalen tidligere (i vårt tilfelle com.tutsplus.mobile.pushdemo).

Deretter bytt til fliken Bygg. Kontroller at konfigurasjonen som er valgt øverst, er Feilsøking. Finn kodesigneringsdelen i tabellen. Det andre elementet i listen skal være Kodesigneringsidentitet, og det bør ha ett barnobjekt, Enhver iOS-enhet. Denne innstillingen forteller Xcode hvilken provisjonsprofil som skal brukes til å signere appen din når du bygger for en iOS-enhet. Verdien for en hvilken som helst iOS-enhet bør være "iPhone-utvikler (for øyeblikket samsvarer med" iPhone-utvikler: [Ditt navn] "[...])."

Dette for øyeblikket valgte alternativet er den automatiske profilvelgeren. Det ser på appens bunt-ID (som vi angir i det siste trinnet) og finner provisjonsprofilen med en matchende ID (eller en jokertegn som samsvarer med). Mens du sikkert kan komme unna med å forlate dette alternativet som-er, prøver jeg vanligvis å minimere de potensielle kildene til kodesigneringsfeil ved å velge profilen jeg vil bruke manuelt.

Og det er det! Du har opprettet et nytt iPhone-prosjekt og konfigurert det for push-varsler! I neste avdrag begynner vi å snakke om serverens side av ting og hvordan du faktisk sender et trykk til den nylig opprettede appen din.