Creazione di un'app Poke per iOS SDK con APNS - Parte 2

Questo tutorial è il secondo di una serie in tre parti su come lavorare con le funzionalità di notifica push di iOS 3.0+. Si concentra su come inviare notifiche al servizio di notifica push (APNS) di Apple tramite Urban Airship. Questa puntata si basa sulle cose che abbiamo creato nell'ultimo, quindi vorrai andare a leggere per primo per essere subito aggiornato se non lo hai già fatto.

Prepara i tuoi certificati SSL

Il file del certificato SSL scaricato dal portale di provisioning iOS nella prima parte di questa serie è in formato DER e contiene solo il certificato, che non contiene la chiave privata. Urban Airship, tuttavia, ha bisogno sia del certificato SSL che della chiave privata caricati in un singolo file PKCS # 12 per poter comunicare correttamente con il servizio di notifica push di Apple. Quindi, abbiamo del lavoro da fare. Fortunatamente per noi, l'utilità Keychain Access fa praticamente tutto per noi con pochi clic del mouse.

La prima cosa che devi fare, se non l'hai già fatto, è fare doppio clic sul certificato scaricato (dovrebbe essere chiamato aps_developer_identity.cer) nel Finder e fare clic su "Aggiungi" per aggiungerlo al tuo portachiavi. Nota: è necessario aggiungere il certificato al stesso portachiavi che contiene le chiavi pubbliche e private generate dalla richiesta di firma del certificato nella puntata precedente.

Una volta che il certificato è stato aggiunto al tuo portachiavi, seleziona "I miei certificati" dall'elenco Categoria a sinistra e trova il tuo certificato appena aggiunto. Accertarsi che abbia un triangolo di apertura accanto ad esso. In caso contrario, significa che Keychain Access non riesce a trovare la chiave privata che corrisponde al certificato nel portachiavi corrente - assicurati di aver aggiunto il certificato al portachiavi appropriato.

Fare clic con il pulsante destro del mouse sul certificato e selezionare "Esporta" Servizi di sviluppo Apple Development [identificativo] "..." Quando viene visualizzato il foglio di esportazione, verificare che "Scambio di informazioni personali (.p12) sia selezionato dal pulsante a comparsa Formato file. nome e premi "Salva".

Viene visualizzato un prompt che richiede una password per il file. Anche se Urban Airship supporta i file PKCS # 12 protetti da password, ti consigliamo di lasciarlo in bianco - basta premere "OK".

Vedi, non era troppo difficile! Ora siamo pronti per dirigerci verso Urban Airship e impostare tutto.

Dirigibile urbano

Come menzionato nella puntata precedente, utilizzeremo Urban Airship per comunicare con il servizio di notifica push di Apple e inviare push alla nostra app dimostrativa.

1. Crea un account

Per iniziare a utilizzare il servizio Urban Airship, dovrai creare un account con loro. Il loro piano indipendente ti dà un milione di messaggi / mese gratis (come da questa scrittura). Compila il modulo e fai clic su "Registrati". Quindi fai clic sull'URL nell'e-mail di conferma che viene inviata per attivare il tuo account.

2. Aggiungi una nuova app al tuo account

Una volta effettuato l'accesso, vai al modulo "Aggiungi una nuova applicazione" e inserisci il nome della tua app. Come accennato in precedenza, Apple utilizza due distinti gruppi di server push per lo sviluppo e la produzione, ognuno dei quali richiede la generazione di un certificato SSL separato nel portale di provisioning. Per questo motivo, Urban Airship ti consiglia di creare applicazioni separate per lo sviluppo e la produzione: in questo modo, puoi continuare a testare le notifiche in fase di sviluppo senza interrompere i servizi push agli utenti che hanno scaricato la tua app dall'App Store.

Poiché stiamo lavorando con una build di sviluppo della nostra app, utilizzeremo il nostro certificato SSL di sviluppo. La Modalità applicazione deve essere impostata su "Sviluppo - connessione ai server di prova". di conseguenza.

Seleziona la casella "Supporto notifiche push" e aggiungi un numero di nuovi campi al modulo. Gli unici campi di cui ci preoccuperemo sono i tre sotto la voce "Apple". Fare clic sul pulsante "Scegli file" e individuare il file PKCS # 12 precedentemente esportato dall'accesso con portachiavi. Se hai deciso di inserire una password per il file dopo tutto, digita nella casella "Password certificato". Dovremmo anche controllare la casella "Push debug mode" per aiutarci a risolvere eventuali problemi. (I curiosi possono cliccare sul link per saperne di più su cosa è e cosa fa).

Con tutte le informazioni inserite, fai clic su "Crea la tua app".

3. Credenziali dell'app

Una volta che la tua app è stata creata, dovresti essere reindirizzato alla pagina dei dettagli della tua app.

Le due cose che voglio chiamare prima di passare all'API sono la chiave dell'applicazione e il segreto dell'applicazione. Per una spiegazione di entrambi, vi rimando alla documentazione di Urban Airship:

Ogni applicazione ha una Chiave di applicazione e sia un Segreto dell'applicazione che un Segreto principale dell'applicazione (precedentemente noto come Application Push Secret). Le credenziali sono fornite in HTTP Basic Auth (con la chiave come username e il segreto come password), sempre tramite la nostra connessione HTTPS. Il segreto dell'applicazione deve essere incluso nell'applicazione per eseguire la registrazione e il master secret deve essere utilizzato solo su un server remoto e non incluso nell'applicazione.

Fondamentalmente, utilizzeremo la chiave dell'applicazione e segrete come nome utente e password, rispettivamente, quando comunichiamo con l'API Urban Airship dalla nostra app. Con questo in mente, copriamo rapidamente la chiamata di registrazione del dispositivo dell'API.

4. API di registrazione del dispositivo

Se scorri verso il basso la pagina della documentazione dell'API che stavamo guardando, il primo elemento che incontrerai è la sezione Registrazione. Leggi rapidamente i primi quattro paragrafi e vedrai che dobbiamo inviare una richiesta HTTP PUT a https://go.urbanairship.com/api/device_tokens/ per registrare un dispositivo.

Torniamo al nostro progetto Xcode e aggiungiamo del codice per fare in modo che la nostra app faccia proprio questo!

Torna alla app

Se non è già aperto, apri il progetto Xcode che abbiamo creato nella prima parte di questa serie.

Registrazione del dispositivo

La prima cosa che dobbiamo fare è fare in modo che la nostra app passi il token che abbiamo ricevuto dall'APNS a Urban Airship. Se ricordi dalla prima parte, abbiamo aggiunto un metodo di callback con notifica push al nostro delegato dell'app che assomigliava a questo:

- (void) application: (UIApplication *) application didRegisterForRemoteNotificationsWithDeviceToken: (NSData *) deviceToken // TODO: passare il token al nostro server NSLog (@ "Registrarsi con successo per le notifiche push"); 

Ora implementeremo l'elemento TODO.

Se si osserva il metodo di callback di cui sopra, si noterà che il token del dispositivo ritorna come un'istanza di NSData e non NSString. Se cerchi il metodo di callback nella documentazione di Apple, vedrai perché:

Il token è un tipo di dati opaco perché è il modulo che il provider deve inviare ai server APS quando invia una notifica a un dispositivo. I server APS richiedono un formato binario per motivi di prestazioni.

Che cosa significa tutto questo? Urban Airship ha bisogno del token come stringa esadecimale, ma il sistema operativo ce lo consegna come dati non elaborati, quindi dobbiamo eseguire alcune conversioni. Anche se probabilmente non è il modo migliore per farlo, useremo il metodo -description di NSData per convertire i dati in una stringa esadecimale:

 // Converti il ​​token in una stringa esadecimale e assicurati che sia tutto maiuscolo NSMutableString * tokenString = [NSMutableString stringWithString: [[deviceToken description] uppercaseString]]; [tokenString replaceOccurrencesOfString: @ "<" withString:@"" options:0 range:NSMakeRange(0, tokenString.length)]; [tokenString replaceOccurrencesOfString:@">Opzioni "withString: @" ": 0 intervallo: NSMakeRange (0, tokenString.length)]; [tokenString replaceOccurrencesOfString: @" "withString: @" "opzioni: 0 intervallo: NSMakeRange (0, tokenString.length)];

Successivamente, dobbiamo creare l'URL, come descritto nella documentazione dell'API:

 // Crea NSURL per la richiesta NSString * urlFormat = @ "https://go.urbanairship.com/api/device_tokens/%@"; NSURL * registrationURL = [NSURL URLWithString: [NSString stringWithFormat: urlFormat, tokenString]];

Abbiamo quindi bisogno di creare un'istanza NSMutableURLRequest. Noi usiamo a mutevole richiesta perché abbiamo bisogno di cambiare il metodo HTTP della richiesta in PUT.

 // Crea la richiesta di registrazione NSMutableURLRequest * registrationRequest = [[NSMutableURLRequest alloc] initWithURL: registrationURL]; [registrationRequest setHTTPMethod: @ "PUT"];

Infine, dobbiamo creare un'istanza di NSURLConnection per inviare effettivamente i dati al server:

 // E spegnerlo NSURLConnection * connection = [NSURLConnection connectionWithRequest: registrationRequest delegate: self]; [inizio connessione];

Noterai che stiamo impostando il delegato della connessione su se stesso. Poiché NSURLRequest non ha il supporto integrato per fornire le credenziali di autenticazione di base HTTP in anticipo (senza scendere nella codifica di base 64), vogliamo sapere quando la connessione riceve una richiesta di autenticazione in modo che possiamo fornire il nome utente e la password. NSURLConnection ha un metodo delegato -connessione: didReceiveAuthenticationChallenge: che ora dovremo implementare anche.

- (void) connection: (NSURLConnection *) connection didReceiveAuthenticationChallenge: (NSURLAuthenticationChallenge *) challenge // Verifica i precedenti fallimenti if ([challenge previousFailureCount]> 0) // Abbiamo già provato - qualcosa non va con le nostre credenziali NSLog ( @ "Credenziali di dirigibili urbani non valide"); ritorno;  // Invia le credenziali di Urban Airship NSURLCredential * airshipCredentials = [NSURLCredential credentialWithUser: @ "" parola d'ordine:@""persistence: NSURLCredentialPersistenceNone]; [[challenge mittente] useCredential: airshipCredentials forAuthenticationChallenge: challenge];

Ricordarsi di inserire la chiave dell'applicazione Urban Airship e il segreto dove indicato. Puoi recuperarli dalla pagina dei dettagli dell'app.

Dovresti anche implementare altri metodi delegati NSURLConnection, come -connection: didFailWithError: and -connection: didReceiveResponse :, il secondo dei quali è possibile utilizzare per verificare il codice di risposta rispetto a quello previsto elencato nella documentazione di Urban Airship. Ma lo lascerò come esercizio al lettore.

Meno male! OK, ora abbiamo la nostra app che passa il token push che riceve dagli APN sui server di Urban Airship. Ora siamo pronti per installare l'app sul nostro dispositivo e provare a inviare alcune notifiche!

Installazione dell'app

Se hai già completato l'intera prima parte della serie, tutto dovrebbe già essere configurato correttamente in Xcode per creare l'app e installarla sul tuo iPhone.

Collega il tuo iPhone al tuo computer. Se è la prima volta che lo fai con Xcode aperto, dovrebbe essere richiesto se vuoi usare il dispositivo per lo sviluppo - se lo fa, fai clic su "Sì". Dagli qualche secondo dopo averlo collegato per essere riconosciuto correttamente da Xcode.

Verifica che l'SDK attivo sia impostato su "Dispositivo" nel popup Panoramica e che la Configurazione attiva sia impostata su "Debug". Quindi premi il pulsante verde "Crea ed esegui" nella barra degli strumenti.

Entro pochi minuti, Xcode dovrebbe creare l'app e installarla sul tuo iPhone. Assicurati di essere connesso a una rete di qualche tipo e di far funzionare l'app per alcuni minuti in modo che abbia il tempo di registrarsi con l'APNS e di inviare il token del dispositivo a Urban Airship.

L'evento principale

Dopo due tutorial, lo siamo finalmente pronto a inviare una notifica push alla nostra app!

Torna al sito web di Urban Airship e accedi (se non sei ancora loggato). Vai alla pagina della tua app e seleziona "Statistiche" dal menu a sinistra.

Accanto a "Device Tokens" sulla destra, dovrebbe esserci un numero 1. Se non c'è, torna indietro e controlla di aver inserito le tue credenziali correttamente. Potrebbe anche voler implementare più dei metodi delegati NSURLConnection per verificare che la richiesta sia correttamente ricevuta dai server di Urban Airship.

Dopo aver verificato che il nostro dispositivo è stato registrato correttamente, invieremo una spinta. Seleziona "Notifiche push" dal menu a sinistra, quindi scegli "Token dispositivo" dal suo sottomenu. Sulla destra, una lunga stringa esadecimale dovrebbe apparire sotto "Token del dispositivo". Copia questa stringa negli appunti e seleziona "Verifica notifiche push" a sinistra.

Assicurati di essere nella scheda iOS e di incollare il token del dispositivo nel campo "Token del dispositivo". Nel campo "Alert", inserisci del testo. Dopo aver verificato che la tua app non sia in esecuzione sul tuo telefono, premi "Invia!"

Entro pochi minuti, l'avviso dovrebbe apparire sul tuo telefono. Congratulazioni! Hai appena inviato la tua prima notifica push! Fatemi sapere nei commenti se avete problemi a farlo funzionare.

Nell'ultima parte di questa serie, esploreremo alcune delle altre funzionalità push mostrate qui, come distintivi e suoni, nonché alcune delle più avanzate funzionalità di Urban Airship API.