Een iOS SDK Poke -app bouwen met APNS - deel 1

Deze tutorial is de eerste in een driedelige serie over werken met de push-notificatiefuncties van iOS 3.0+. Het bevat alles wat u moet doen om pushmeldingen in uw app te laten werken: registreren voor meldingen, configureren van uw app in de iOS Provisioning Portal, verzenden van meldingen naar Apple's Push Notification Service (APNS) en verwerken in uw app.

In deze zelfstudie maken we een demo-app met de naam Poke. Hiermee kunt u gebruikers "porren" via pushmeldingen. Hoewel je waarschijnlijk geen goed gebruik van de service maakt, leert deze tutorial je de basis van wat je moet weten om aan de slag te gaan.

1. Duw overzicht

Veel bureaubladtoepassingen maken gebruik van achtergrondprocessen om gebruikers voortdurend bijgewerkte informatie te bieden. Deze achtergrondtoepassingen implementeren meestal een pull-ontwerp - ze pollen actief een server voor wijzigingen in hun gegevens. Het is niet ongebruikelijk dat verschillende van deze programma's op uw computer worden uitgevoerd en verbinding maken met een aantal externe servers.

Hoewel dit misschien geen probleem is op een desktopcomputer met veel beschikbaar geheugen en verwerkingscapaciteit en een eindeloze stroomvoorziening, wordt deze methode snel een probleem op een mobiel apparaat met een veel beperkter aantal van alle drie.

Met pushmeldingen, geïntroduceerd in iOS 3.0, heeft Apple deze beperkingen omzeild met een push-gebaseerd ontwerp. In plaats van te eisen dat uw app open blijft en constant naar updates vraagt ​​zoals in het pull-model, luistert iOS zelf naar updates en brengt het uw app op de hoogte wanneer ze aankomen. Het resultaat is minder processor-, geheugen- en batterijgebruik. Bovendien wordt in plaats van elke app die verbinding maakt met zijn eigen server, een enkele permanente verbinding tussen het iOS-apparaat en de APNS onderhouden.

Zoals opgemerkt in het bovenstaande diagram, maakt uw server met pushmeldingen verbinding met de APNS in plaats van met het apparaat van de eindgebruiker. Wanneer er gegevens veranderen waarin een bepaalde gebruiker geïnteresseerd is, stuurt uw server een bericht naar de APNS die de gebruiker dan op de hoogte brengt. De gebruiker kan dan beslissen wat te doen met die informatie (dat wil zeggen er nu aan werken of tot later wachten).

Notitie: Het is mogelijk dat uw app nog steeds sommige of alle gewijzigde gegevens van uw server moet downloaden, maar het verschil is dat het apparaat van de gebruiker geen verspilling van verwerkingscycli, batterijlevensduur en netwerkbandbreedte heeft door uw server om de 15 minuten te vragen of er iets nieuws is. Hierover zullen we in een later segment meer details lezen.

Pushmeldingen werken via elke netwerkverbinding en er zijn geen extra kosten (geheven door Apple) voor u, als ontwikkelaar, om deze geweldige functie aan uw apps toe te voegen.

In de onlangs uitgebrachte App Store-richtlijnen heeft Apple een aantal regels opgesteld met betrekking tot de service. De meeste zijn gezond verstand, maar u wilt misschien naar hen kijken als u dat nog niet hebt gedaan.

2. Workflow- en push-vereisten

Kort gezegd is dit de eenvoudige app-workflow voor pushmeldingen:

  1. Uw app dient een verzoek in bij het besturingssysteem om zich te registreren voor meldingen.
  2. Het besturingssysteem maakt een veilige verbinding met de APNS, krijgt een apparaattoken terug en geeft deze door aan uw app. Merk op dat dit token om veiligheidsredenen niet geldt is niet hetzelfde als de apparaat-id (zoals ontleend aan de eigenschap deviceIdentifier van UIDevice). Als een externe gebruiker zijn verloren iPhone wist, bijvoorbeeld wanneer het apparaat zich opnieuw aanmeldt voor meldingen, ontvangt hij een ander apparaatstoken.
  3. Uw app geeft dit token door aan uw server, waar het wordt opgeslagen.
  4. Wanneer u een pushmelding naar een bepaalde gebruiker wilt verzenden, pakt uw server de apparaattoken van die gebruiker en verzendt deze in een speciaal opgemaakte payload naar de APNS.
  5. De APNS stuurt het bericht door naar het apparaat van de betreffende gebruiker.

We zullen elk item op de lijst behandelen terwijl we deze reeks doorlopen.

Er zijn drie basisvereisten voor de Apple Push Notification Service:

Een server

Zoals eerder vermeld, brengt Apple geen kosten in rekening voor ontwikkelaars om deze service te gebruiken. De service biedt echter geen enkel frontend waarmee u meldingen kunt verzenden - u moet een eigen server hebben die verbinding maakt met de servers van Apple en pushs verzendt, en er kunnen hosting- en andere kosten aan dat proces zijn verbonden.

Een aantal services van derden zijn opgedoken om dit probleem aan te pakken. Deze services fungeren als een tussenpersoon tussen u en de APNS - zij verzorgen het instellen van de SSL-verbinding met de APNS en stellen gewoonlijk een API beschikbaar die u kunt gebruiken om gemakkelijker pushs te verzenden. Sommige hebben zelfs een webfrontend die u kunt gebruiken om snel meldingen te verzenden zonder zelfs maar een code te hoeven schrijven. In deze serie zullen we Urban Airship gebruiken, voornamelijk vanwege het gebruiksgemak en de uitstekende prijzen.

Een SSL-certificaat

Het certificaat identificeert uw app voor de service en wordt gebruikt om de beveiligde verbinding tot stand te brengen tussen uw server en APNS. Deze certificaten worden (gratis) gegenereerd in de iOS Provisioning Portal en instructies over hoe u dit doet vindt u hieronder in stap 5.

Een correct geconfigureerd provisioningprofiel

Dit wordt ook in detail besproken in stap 5 hieronder. Laten we ingaan.

3. Maak een nieuw iPhone-project in Xcode

Open Xcode en maak een nieuw iPhone-project. Voor deze zelfstudie gebruiken we de eenvoudige "View-based Application" -sjabloon voor iPhone en noemen we ons project "Poke."

4. Registreer voor pushmeldingen

Aangezien dit deel van de zelfstudie voornamelijk zal zijn gericht op het instellen van pushmeldingen, zullen we ons geen tijd meer wijden aan het configureren van onze weergave om nog enige nuttige informatie te tonen. We halen dat op in de derde aflevering. Laten we in plaats daarvan meteen beginnen met het registreren van onze app met de Apple Push Notification Service.

Om ervoor te zorgen dat uw app pushmeldingen ontvangt, moet deze eerst de Apple Push Notification Service laten weten welke soorten meldingen zij wenst te ontvangen. Uw app kan elke combinatie van de volgende drie typen ondersteunen (vermeld in de volgorde van minst tot meest opdringerig):

  • badges - toont een klein aantal in een rode cirkel boven op uw app-pictogram (zoals in de Mail- en App Store-apps hieronder):
  • Sounds - speelt ofwel het standaard systeemgeluid af (zoals te horen wanneer een SMS binnenkomt) of uw eigen merkgeluid. Als je je eigen geluid gaat gebruiken, moet het worden opgenomen in je app-bundel en moet het in een van de volgende indelingen zijn:
    • Lineaire PCM
    • MA4
    • p-wet
    • een wet
  • Waarschuwingen - toont een UIAlertView met uw bericht:

    Omdat waarschuwingen gebruikers dwingen te stoppen met wat hij doet om met hen te communiceren, beveelt Apple ten zeerste aan dat ze spaarzaam worden gebruikt. Misbruik uw gebruikers niet met waarschuwingen (of een andere pushmelding), ze schakelen wel pushmeldingen uit naar uw app of verwijderen uw app helemaal.

Voor dit deel van de tutorial zullen we ons concentreren op waarschuwingen. In de laatste tranche komen we terug en experimenteren we met de andere twee.

Laten we doorgaan en iOS informeren dat onze app waarschuwingsmeldingen wil ontvangen.

Open PokeAppDelegate.m (of wat uw afgevaardigde van de app dan ook genoemd krijgt) en werk de toepassing bij: didFinishLaunchingWithOptions: callback om er als volgt uit te zien:

- (BOOL) toepassing: (UIApplication *) toepassing didFinishLaunchingWithOptions: (NSDictionary *) launchOptions // Registreren voor alarmmeldingen [toepassingsregisterForRemoteNotificationTypes: UIRemoteNotificationTypeAlert]; // Voeg de weergave van de weergavecontroller toe aan het venster en op het scherm. [window addSubview: viewController.view]; [window makeKeyAndVisible]; terugkeer JA; 

Merk op dat we alleen UIRemoteNotificationTypeAlert passeren, omdat alles wat we nu willen ontvangen waarschuwingen zijn. Als u andere meldingen wilt ontvangen, kunt u deze met de bits toevoegen of:

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

Met deze aanpassingen aan onze app-deelnemer, zal het besturingssysteem beginnen te registreren bij de Apple Push Notification Service. Als het lukt, stuurt het een toepassing: didRegisterForRemoteNotificationsWithDeviceToken: bericht aan de delegate van uw app met het token van het apparaat; als het mislukt, stuurt het een aanvraag: didFailToRegisterForRemoteNotificationsWithError: message. In het ideale geval zou je beide moeten implementeren.

Voeg de volgende twee methoden toe aan uw app-gemachtigde om de twee mogelijke uitkomsten van registratie te behandelen:

- (ongeldige) toepassing: (UIApplication *) toepassing didRegisterForRemoteNotificationsWithDeviceToken: (NSData *) deviceToken // TODO: geef het token door aan onze server NSLog (@ "We zijn succesvol geregistreerd voor pushmeldingen");  - (ongeldige) toepassing: (UIApplication *) toepassing didFailToRegisterForRemoteNotificationsWithError: (NSError *) fout // Informeer de gebruiker dat registratie mislukt NSString * failureMessage = @ "Er is een fout opgetreden bij het proberen te \ registreren voor pushmeldingen."; UIAlertView * failureAlert = [[UIAlertView alloc] initWithTitle: @ "Fout" bericht: failureMessage delegate: nil cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [failureAlert show]; [failureAlert-release]; 

In een later segment komen we terug op de callback voor succes - voorlopig logt het alleen een snel bericht in. Ons falen callback informeert de gebruiker van de mislukking. Merk op dat registratie zal altijd mislukken op de iPhone-simulator, omdat deze geen pushmeldingen ondersteunt. Om uw code correct te testen, moet u een echt apparaat gebruiken.

5. Configureer uw app in de iOS Provisioning Portal

Nu we een eenvoudige app hebben gemaakt aan onze kant, gaan we naar Apple's kant van de zaak en laten we alles instellen in de iOS Provisioning Portal.

Als je al betalend lid bent van het iOS Developer Program, log dan in op het iOS Dev Center en klik op de link rechts om naar de iOS Provisioning Portal te gaan. Als je nog geen lid bent, kun je je hier voor $ 99 aanmelden.

Het eerste dat u moet doen, is ervoor zorgen dat u uw account al hebt ingesteld met de nodige ontwikkelaarcertificaten en uw apparaten hebt toegevoegd. De instructies om dit te doen vallen buiten het bestek van deze zelfstudie, maar Apple biedt een installatie-assistent en video's en andere bronnen om u door het proces te leiden. Bekijk het gedeelte "Home" van de portal voor meer informatie.

De volgende stap is om een ​​nieuwe app-ID te maken. Om drukopdrachten die met een specifieke toepassing naar de dienst zijn verzonden, te koppelen, doet de Apple Push Notification Service dat wel niet ondersteuning voor apps met een "wildcard" -bundel-ID (dwz een identifier met een slepende asterisk zoals com.acme. *). De reden daarvoor is dat de push-service in staat moet zijn om de specifieke app te identificeren waartoe de push behoort, maar met wildcard-id's kunt u meerdere apps met hetzelfde provisioningprofiel bouwen. Dus als u al een jokerteken-ID hebt ingesteld voor ontwikkeling, moet u een nieuwe voor deze app maken om ondersteuning voor pushmeldingen in te schakelen. Als uw app-ID geen jokerteken-ID gebruikt, kunt u deze stap overslaan.

Klik op de knop 'Nieuwe app-ID' in de rechterbovenhoek. Vul de informatie van uw app in en klik op de knop "Verzenden".

Zoek uw nieuw gemaakte (of al bestaande) app-ID in de lijst en klik op de link 'Configureren' aan de rechterkant. Vink op de pagina die wordt weergegeven 'Activeren voor Apple Push Notification-service' aan.

Als "Activeren voor Apple Push Notification-service" niet wordt weergegeven, is uw app-ID waarschijnlijk niet correct geconfigureerd. Ga terug naar de vorige stap en zorg ervoor dat u geen jokerteken-ID hebt ingevoerd.

U zult merken dat er twee certificaten worden vermeld: één voor ontwikkeling en één voor productie. De APNS heeft testservers en live productieservers. Elk gebruikt en vereist een ander client-SSL-certificaat. De testservers kunnen worden gebruikt om pushs naar apps te verzenden die zijn gebouwd met ontwikkelingsprovisioningprofielen; de productieservers kunnen worden gebruikt om pushen naar apps te verzenden die zijn gebouwd met distributieprovisioningprofielen (Ad Hoc, In House of App Store-builds).

Voor nu hoeven we ons niet al te veel zorgen te maken over het onderscheid, maar dit zal in de volgende aflevering een rol gaan spelen wanneer we beginnen met het opzetten van onze account bij Urban Airship.

Omdat we op dit moment met een ontwikkelingsuitbreiding van onze app zullen werken, klikt u op de knop 'Configureren' voor het SSL-SSL-certificaat. Volg de aanwijzingen in het vak dat verschijnt om een ​​ondertekenverzoek voor certificaten te maken en klik vervolgens op 'Doorgaan'.

Selecteer uw nieuw gegenereerde CSR door op "Choose File" te klikken en klik vervolgens op "Generate" om uw SSL-certificaat te genereren.

U zou een voortgangsmeter moeten zien en daarna de volgende bevestiging:

Klik op "Doorgaan" en u gaat naar de stap Downloaden en installeren. In het tweede deel van deze zelfstudie bespreken we wat we met dit certificaat kunnen doen, maar ga nu verder en klik op 'Downloaden' om uw nieuwe APNS-client SSL-certificaat te downloaden..

Vervolgens moeten we een inrichtingsprofiel maken voor onze nieuwe (of bestaande, niet-joker) app-ID.

Opmerking: volgens de Local and Push Notification Guide van Apple, als u al een provisioningprofiel hebt gemaakt voor uw bestaande App-ID voorafgaand om pushmeldingen voor die ID in te schakelen, moet u het profiel op de een of andere manier wijzigen (d.w.z. de naam wijzigen) zodat de portal deze opnieuw genereert met de nodige pushrechten.

U kunt controleren of een profiel over de juiste pushrechten beschikt door het in een teksteditor te openen. Het moet een aps-environment-sleutel hebben:

Terug in de iOS-provisioningportal selecteert u "Provisioning" in het hoofdmenu aan de linkerkant. Klik op het tabblad "Ontwikkeling" en selecteer de knop "Nieuw profiel". Voer een beschrijvende naam in het veld Profielnaam in en selecteer de certificaten voor de ontwikkelaars die dit profiel kunnen gebruiken om apps te bouwen. Als u zich als individu heeft aangemeld, wordt slechts één certificaat vermeld (het uwe); als u zich hebt aangemeld als bedrijf, zijn er mogelijk meer dan een vermeld.

Kies de app-ID die u in de eerdere stap (of uw bestaande ID) hebt gemaakt in de lijst met app-ID's en selecteer de apparaten waarop u uw app wilt testen in de lijst onderaan. Klik vervolgens op "Verzenden" om het nieuwe voorzieningenprofiel te genereren.

Na een paar minuten wordt je profiel uitgegeven en verschijnt er een knop "Downloaden" in de kolom Acties aan de rechterkant (mogelijk moet je je browser vernieuwen). Zodra dit het geval is, klikt u erop om uw nieuwe ontwikkelprovisioningprofiel te downloaden.

Om uw profiel te installeren, sleept u het nieuw gedownloade .mobileprovision-bestand naar Xcode of iTunes in het Dock.

6. Configureer uw app om het nieuwe provisioningprofiel te gebruiken

Ga terug naar je project in Xcode.

Selecteer "Edit Active Target 'Poke'" in het menu Project. Navigeer naar het tabblad Eigenschappen en voer de bundel-ID in die u eerder in de iOS Provisioning Portal hebt ingesteld (in ons geval, com.tutsplus.mobile.pushdemo).

Schakel vervolgens over naar het tabblad Opbouwen. Zorg ervoor dat de configuratie die bovenaan is geselecteerd Debug is. Ga naar het gedeelte Code ondertekening in de tabel. Het tweede item in de lijst moet Code Signing Identity zijn en het moet één onderliggende item hebben, elk iOS-apparaat. Deze instelling vertelt Xcode welk voorzieningenprofiel wordt gebruikt om uw app te ondertekenen bij het bouwen voor een iOS-apparaat. De waarde voor elk iOS-apparaat moet 'iPhone-ontwikkelaar (komt momenteel overeen met' iPhone-ontwikkelaar: [uw naam] '[...]). "

Deze momenteel geselecteerde optie is de automatische profielkiezer. Er wordt gekeken naar de bundel-ID van uw app (die we in de laatste stap hebben ingesteld) en vindt het inrichtingsprofiel met een overeenkomende ID (of een overeenkomende jokertag-ID). Hoewel je waarschijnlijk weg kunt komen als je deze optie ongewijzigd laat, probeer ik meestal de potentiële bronnen van code-ondertekeningsfouten te minimaliseren door het profiel te selecteren dat ik handmatig wil gebruiken.

En dat is het! Je hebt met succes een nieuw iPhone-project gemaakt en het geconfigureerd voor pushmeldingen! In de volgende aflevering zullen we beginnen te praten over de serverkant van dingen en hoe je daadwerkelijk een push naar je nieuw gemaakte app kunt sturen.