Deze tutorial is de tweede in een driedelige serie over het werken met de push-notificatiefuncties van iOS 3.0+. Het richt zich op het verzenden van meldingen naar Apple's Push Notification Service (APNS) via Urban Airship. Deze aflevering bouwt voort op de dingen die we in de vorige hebben ingesteld, dus je wilt die eerst eerst doorlezen om op snelheid te komen als je dat nog niet hebt gedaan.
Het SSL-certificaatbestand dat u hebt gedownload van de iOS Provisioning Portal in deel een van deze serie is in DER-indeling en bevat alleen het certificaat - het bevat niet uw persoonlijke sleutel. Urban Airship heeft echter zowel het SSL-certificaat als de privésleutel nodig die is geüpload in een enkel PKCS # 12-bestand om goed te kunnen communiceren met de Apple Push Notification Service. Dus we hebben wat werk te doen. Gelukkig voor ons, doet het hulpprogramma Sleutelhangertoegang vrijwel alles voor ons met slechts een paar muisklikken.
Het eerste dat je moet doen, als je dat nog niet gedaan hebt, is om te dubbelklikken op het gedownloade certificaat (het moet aps_developer_identity.cer heten) in de Finder en klik op "Toevoegen" om het aan je sleutelhanger toe te voegen. Opmerking: u moet het certificaat toevoegen aan de dezelfde sleutelhanger die de openbare en privésleutels bevat die zijn gegenereerd door het certificaataanvraagverzoek in de vorige aflevering.
Nadat het certificaat aan uw sleutelhanger is toegevoegd, selecteert u 'Mijn certificaten' in de lijst Categorie aan de linkerkant en zoekt u uw nieuw toegevoegde certificaat. Controleer of er een driehoekje naast staat. Als dit niet het geval is, betekent dit dat Keychain Access de persoonlijke sleutel die overeenkomt met het certificaat in de huidige sleutelhanger niet kan vinden - zorg ervoor dat u het certificaat hebt toegevoegd aan de juiste sleutelhanger.
Klik met de rechtermuisknop op het certificaat en kies 'Exporteren' Apple Development Push Services [ID] "..." Wanneer het exportblad verschijnt, controleer dan of "Personal Information Exchange (.p12) is geselecteerd in de pop-upknop Bestandsindeling. naam en druk op "Opslaan".
Er verschijnt een prompt met het verzoek om een wachtwoord voor het bestand. Hoewel Urban Airship met een wachtwoord beveiligde PKCS # 12-bestanden ondersteunt, beveelt het aan om het blanco te laten - druk gewoon op "OK".
Kijk, dat was niet zo moeilijk! Nu zijn we klaar om naar Urban Airship te gaan en alles in te stellen.
Zoals vermeld in de vorige aflevering, zullen we Urban Airship gebruiken om te communiceren met de Apple Push Notification Service en pushs sturen naar onze demo-app.
Om de service Urban Airship te kunnen gebruiken, moet u een account bij hen maken. Hun indieplan geeft je een miljoen berichten / maand gratis (vanaf dit schrijven). Vul het formulier in en klik op 'Aanmelden'. Klik vervolgens op de URL in de bevestigingsemail die is verzonden om uw account te activeren.
Nadat u bent ingelogd, gaat u naar het formulier "Een nieuwe applicatie toevoegen" en voert u de naam van uw app in. Zoals eerder vermeld, maakt Apple gebruik van twee afzonderlijke groepen push-servers voor ontwikkeling en productie - elk vereist dat u een afzonderlijk SSL-certificaat genereert in de provisioningportal. Daarom raadt Urban Airship u aan om afzonderlijke applicaties aan hun einde te maken voor ontwikkeling en productie - op die manier kunt u doorgaan met het testen van meldingen in ontwikkeling zonder de push-services te onderbreken voor uw gebruikers die uw app hebben gedownload via de App Store.
Omdat we werken met een ontwikkelversie van onze app, zullen we ons SSL-ontwikkelingscertificaat gebruiken. De toepassingsmodus moet worden ingesteld op 'Ontwikkeling - verbinden met testservers'. overeenkomstig.
Vink het vakje aan met de melding "Push Notifications Support" en een aantal nieuwe velden moet aan het formulier worden toegevoegd. De enige velden waar we ons zorgen over maken zijn de drie onder de kop 'Apple'. Klik op de knop "Bestand kiezen" en zoek het PKCS # 12-bestand dat u eerder vanuit Keychain Access hebt geëxporteerd. Als u toch hebt besloten om een wachtwoord voor het bestand in te voeren, typt u dit in het vak "Certificaatwachtwoord". We zouden ook het vak "Push debug mode" moeten controleren om ons te helpen bij het oplossen van problemen. (De nieuwsgierigen kunnen op de link klikken om meer te weten te komen over wat het is en wat het doet).
Klik met al uw gegevens op 'Uw app maken'.
Nadat uw app is gemaakt, moet u worden omgeleid naar de pagina met details van uw app.
De twee dingen die ik wil noemen voordat we verder gaan met de API, zijn de toepassingssleutel en het toepassingsgeheim. Voor een uitleg van beide verwijs ik naar de documentatie van Urban Airship:
Elke toepassing heeft een toepassingssleutel en zowel een toepassingsgeheim als een toepassingsmeestergeheim (voorheen bekend als Application Push Secret). Referenties worden geleverd in HTTP Basic Auth (met de sleutel als gebruikersnaam en het geheim als het wachtwoord), altijd via onze HTTPS-verbinding. Het toepassingsgeheim moet worden opgenomen in de toepassing om registratie uit te voeren en het hoofdgeheim mag alleen worden gebruikt op een externe server en niet in de toepassing..
In principe gebruiken we de applicatiesleutel en geheim als de gebruikersnaam en het wachtwoord, respectievelijk, wanneer we communiceren met de Urban Airship API van onze App. Met dat in gedachten, laten we snel de device registration call van de API bespreken.
Als u naar beneden scrolt op de API-documentatiepagina waarnaar we zojuist keken, is het eerste item dat u tegenkomt het gedeelte Registratie. Lees snel de eerste vier paragrafen door en u zult zien dat we een HTTP PUT-verzoek naar https://go.urbanairship.com/api/device_tokens/ moeten verzenden
Laten we teruggaan naar ons Xcode-project en wat code toevoegen om onze app precies dat te laten doen!
Als het nog niet is geopend, opent u het Xcode-project dat we in het eerste deel van deze serie hebben gemaakt.
Het eerste wat we moeten doen, is dat onze app het token dat we van de APNS hebben ontvangen, doorgeeft aan Urban Airship. Als je je herinnert van deel één, hebben we een call notification callback-methode toegevoegd aan onze app-afgevaardigde die er als volgt uitzag:
- (ongeldige) toepassing: (UIApplication *) toepassing didRegisterForRemoteNotificationsWithDeviceToken: (NSData *) deviceToken // TODO: geef het token door aan onze server NSLog (@ "We zijn succesvol geregistreerd voor pushmeldingen");
Nu gaan we het TODO-item implementeren.
Als u naar de bovenstaande callback-methode kijkt, ziet u dat het token van het apparaat terugkomt als een exemplaar van NSData en niet als NSString. Als u de callback-methode opzoekt in de documentatie van Apple, ziet u waarom:
Het token is een ondoorzichtig gegevenstype, omdat dit de vorm is die de provider moet indienen bij de APS-servers wanneer deze een melding naar een apparaat verzendt. De APS-servers vereisen een binair formaat om prestatieredenen.
Wat betekent dit allemaal? Urban Airship heeft het token nodig als een hexadecimale reeks, maar het besturingssysteem geeft het aan ons als onbewerkte gegevens, dus we moeten wat converteren doen. Hoewel dit waarschijnlijk niet de beste manier is om dit te doen, gebruiken we de descriptormethode van NSData om de gegevens naar een hexadecimale reeks te converteren:
// Converteer het token naar een hex-string en zorg ervoor dat het allemaal caps NSMutableString * tokenString = [NSMutableString stringWithString: [[deviceToken description] hoofdletterString]]; [tokenString replaceOccurrencesOfString: @ "<" withString:@"" options:0 range:NSMakeRange(0, tokenString.length)]; [tokenString replaceOccurrencesOfString:@">"withString: @" "opties: 0 bereik: NSMakeRange (0, tokenString.length)]; [tokenString replaceOccurrencesOfString: @" "withString: @" "options: 0 range: NSMakeRange (0, tokenString.length)];
Vervolgens moeten we de URL bouwen, zoals beschreven in de API-documentatie:
// Maak de NSURL voor het verzoek NSString * urlFormat = @ "https://go.urbanairship.com/api/device_tokens/%@"; NSURL * registrationURL = [NSURL URLWithString: [NSString stringWithFormat: urlFormat, tokenString]];
We moeten dan een NSMutableURLRequest instantiëren. We gebruiken een veranderlijk aanvraag omdat we de HTTP-methode van het verzoek naar PUT moeten wijzigen.
// Maak het registratieverzoek NSMutableURLRequest * registrationRequest = [[NSMutableURLRequest allocation] initWithURL: registrationURL]; [registrationRequest setHTTPMethod: @ "PUT"];
Ten slotte moeten we een instantie van NSURLConnection maken om de gegevens daadwerkelijk naar de server te verzenden:
// En vuur het af NSURLConnection * connection = [NSURLConnection connectionWithRequest: registrationRequest delegate: self]; [verbinding start];
Je zult merken dat we de delegatie van de verbinding naar zichzelf richten. Omdat NSURLRequest geen ingebouwde ondersteuning heeft voor het up-front verschaffen van HTTP Basic Authentication-referenties (zonder in de basis 64-codering te duiken), willen we weten wanneer de verbinding een verificatie-uitdaging ontvangt, zodat we de gebruikersnaam en het wachtwoord kunnen verstrekken. NSURLConnection heeft een gedelegeerde methode -verbinding: didReceiveAuthenticationChallenge: die we nu ook moeten implementeren.
- (ongeldig) verbinding: (NSURLConnection *) verbinding didReceiveAuthenticationChallenge: (NSURLAuthenticationChallenge *) challenge // Controleer op eerdere fouten als ([challenge vorige fout+bevestiging]> 0) // We hebben het al geprobeerd - er is iets mis met onze referenties NSLog ( @ "Urban Airship-referenties ongeldig"); terug te keren; // Verstuur onze Urban Airship-inloggegevens NSURLCredential * airshipCredentials = [NSURLCredential credentialWithUser: @ ""wachtwoord: @" "persistence: NSURLCredentialPersistenceNone]; [[challenge-afzender] useCredential: airshipCredentials forAuthenticationChallenge: challenge];
Vergeet niet om uw Urban Airship-applicatiesleutel en geheim in te voeren, waar aangegeven. Je kunt ze ophalen van de detailpagina van je app.
U moet ook andere NSURLConnection-deelnemersmethoden implementeren, zoals -connection: didFailWithError: en -connection: didReceiveResponse :, de tweede waarvan u de responscode kunt gebruiken ten opzichte van de verwachte code die wordt vermeld in de documentatie van Urban Airship. Maar ik laat dat als een oefening voor de lezer.
Oef! OK, dus we hebben nu onze app die het push-token doorgeeft dat het ontvangt van de APNS op de servers van Urban Airship. We zijn nu klaar om de app op ons apparaat te installeren en proberen enkele meldingen te verzenden!
Als je het eerste deel van de serie al hebt doorlopen, moet alles al goed zijn geconfigureerd in Xcode om de app te bouwen en op je iPhone te installeren.
Sluit uw iPhone aan op uw computer. Als dit de eerste keer is dat u dit hebt gedaan met Xcode open, moet dit u vragen of u het apparaat wilt gebruiken voor ontwikkeling - als dit het geval is, klikt u op "Ja". Geef het een paar seconden nadat je het hebt aangesloten om goed herkend te worden door Xcode.
Controleer of de actieve SDK is ingesteld op 'Apparaat' in de pop-up Overzicht en of de actieve configuratie is ingesteld op 'Foutopsporing'. Druk vervolgens op de groene knop "Build and Run" in de werkbalk.
Binnen een paar minuten moet Xcode de app bouwen en op je iPhone installeren. Zorg ervoor dat je verbonden bent met een netwerk van een soort en laat de app een paar minuten draaien zodat het tijd heeft om je bij de APNS te registreren en zijn apparaattoken naar Urban Airship te sturen.
Na twee tutorials zijn we dat Tenslotte klaar om een pushmelding naar onze app te verzenden!
Ga terug naar de website van Urban Airship en log in (als je nog niet bent ingelogd). Navigeer naar de pagina van uw app en selecteer 'Statistieken' in het menu aan de linkerkant.
Naast "Device Tokens" aan de rechterkant, moet er een nummer 1 zijn. Als dit niet het geval is, gaat u terug en controleert u of u uw referenties correct hebt ingevoerd. U wilt misschien ook meer van de NSURLConnection-deelnemersmethoden implementeren om te controleren of de aanvraag correct wordt ontvangen door de servers van Urban Airship.
Nadat we hebben geverifieerd dat ons apparaat correct is geregistreerd, sturen we nu een push. Selecteer "Push Notifications" in het menu aan de linkerkant en kies vervolgens "Device Tokens" in het submenu. Aan de rechterkant verschijnt een lange hexadecimale reeks onder 'Device Token'. Kopieer deze string naar het klembord en selecteer vervolgens "Test Push Notifications" aan de linkerkant.
Zorg ervoor dat je op het tabblad iOS staat en plak je token in het veld "Device token". Voer wat tekst in het veld "Waarschuwing" in. Nadat u hebt gecontroleerd of uw app niet op uw telefoon wordt uitgevoerd, klikt u op 'Verzenden'.
Binnen een paar minuten verschijnt de waarschuwing op je telefoon. Gefeliciteerd! U hebt zojuist uw eerste push-melding verzonden! Laat het me weten in de reacties als u problemen ondervindt om het te laten werken.
In het laatste deel van deze serie zullen we enkele van de andere push-functies die hier worden getoond, zoals badges en geluiden, en enkele meer geavanceerde functies van Urban Airship API verkennen..