Questo tutorial è il primo di una serie in tre parti su come lavorare con le funzionalità di notifica push di iOS 3.0+. Coprirà tutto ciò che devi fare per ricevere notifiche push dall'app: registrarti per le notifiche, configurare la tua app nel portale di provisioning iOS, inviare notifiche al servizio di notifica push di Apple (APNS) e gestirle nella tua app.
In questo tutorial creeremo un'app demo chiamata Poke. Ti permetterà di "colpire" gli utenti tramite avvisi di notifica push. Anche se probabilmente non è un ottimo uso del servizio, questo tutorial ti insegnerà le basi di ciò che devi sapere per iniziare.
Molte applicazioni desktop utilizzano processi in background per fornire costantemente agli utenti informazioni aggiornate. Queste applicazioni in background di solito implementano un progetto di pull, che esegue il polling attivo di un server per le modifiche ai propri dati. Non è raro avere diversi di questi programmi in esecuzione sul tuo computer, che si collegano a un numero di server di terze parti.
Anche se questo potrebbe non essere un problema su una macchina desktop con un sacco di memoria disponibile e throughput di elaborazione e una fornitura infinita di energia, questa metodologia diventa rapidamente un problema su un dispositivo mobile con una quantità molto più limitata di tutti e tre.
Con le notifiche push, introdotte in iOS 3.0, Apple ha aggirato queste limitazioni con un design basato su push. Piuttosto che forzare la tua app a rimanere aperta e a interrogare costantemente gli aggiornamenti come nel modello di pull, iOS invece ascolta gli aggiornamenti e avvisa la tua app quando arrivano. Il risultato è una diminuzione del processore, della memoria e dell'uso della batteria. Inoltre, anziché ogni app che si connette al proprio server, viene mantenuta una singola connessione permanente tra il dispositivo iOS e l'APNS.
Come notato nello schema sopra, con le notifiche push il tuo server si connette all'APNS invece del dispositivo dell'utente finale. Quando i dati in cui un determinato utente è interessato, il server invia un messaggio all'APNS che lo notificherà all'utente. L'utente può quindi decidere cosa fare con tali informazioni (ad esempio, agire ora o attendere fino a un momento successivo).
Nota: La tua app potrebbe ancora dover scaricare alcuni o tutti i dati modificati dal tuo server, ma la differenza è che il dispositivo dell'utente non ha sprecato cicli di elaborazione, durata della batteria e larghezza di banda della rete chiedendo al server ogni 15 minuti se c'è qualcosa di nuovo. Entreremo in maggiori dettagli su questo in un segmento successivo.
Le notifiche push funzionano su qualsiasi connessione di rete e non vi sono costi aggiuntivi (imposti da Apple) per te, come sviluppatore, per aggiungere questa fantastica funzionalità alle tue app.
Nelle linee guida sull'App Store recentemente rilasciate, Apple ha definito una serie di regole relative al servizio. La maggior parte è di buon senso, ma potresti volerlo dare un'occhiata se non l'hai già fatto.
In poche parole, questo è il flusso di lavoro dell'app di base per le notifiche push:
Copriremo ogni voce dell'elenco mentre passiamo attraverso questa serie.
Esistono tre requisiti di base per il servizio di notifica push di Apple:
Come accennato in precedenza, Apple non addebita agli sviluppatori di utilizzare questo servizio. Tuttavia, il servizio non fornisce alcun tipo di frontend da cui è possibile inviare notifiche: è necessario disporre del proprio server che si connette ai server di Apple e invia push, e potrebbero esserci hosting e altri costi associati a tale processo.
Numerosi servizi di terze parti sono stati ritagliati per risolvere questo problema. Questi servizi fungono da intermediari tra te e l'APNS: gestiscono l'impostazione della connessione SSL con l'APNS e solitamente espongono un'API che puoi utilizzare per inviare più facilmente i push. Alcuni dispongono persino di un front-end Web che è possibile utilizzare per inviare rapidamente notifiche senza dover scrivere alcun codice. In questa serie, useremo Urban Airship, principalmente per la loro facilità d'uso e l'ottimo prezzo.
Il certificato identifica la tua app al servizio e viene utilizzata per stabilire la connessione sicura tra il tuo server e APNS. Questi certificati sono generati (gratuitamente) nel portale di provisioning iOS e le istruzioni su come farlo sono riportate di seguito al punto 5.
Questo è anche trattato in dettaglio nel passaggio 5, di seguito. Scaviamo dentro.
Apri Xcode e crea un nuovo progetto per iPhone. Per questo tutorial, utilizzeremo il semplice modello "Applicazione basata sulla vista" per iPhone e nomineremo il nostro progetto "Poke".
Poiché questa parte del tutorial si concentrerà principalmente sulle notifiche push get impostate, non passeremo molto tempo a configurare la nostra vista per mostrare ancora una volta qualsiasi informazione utile. Lo raccogliamo nella terza puntata. Invece, passiamo direttamente alla registrazione della nostra app con il servizio di notifica push Apple.
Affinché la tua app riceva notifiche push, deve prima comunicare al servizio di notifica push Apple quali tipi di notifiche desideri ricevere. La tua app può supportare qualsiasi combinazione dei seguenti tre tipi (elencati in ordine di meno invadente):
Poiché gli avvisi obbligano l'utente a interrompere ciò che sta facendo per interagire con loro, Apple consiglia vivamente di utilizzarli con parsimonia. Non abusare dei tuoi utenti con avvisi (o qualsiasi tipo di notifica push, se è per questo) - disattiveranno le notifiche push per la tua app o semplicemente elimineranno la tua app.
Per questa parte del tutorial, ci concentreremo sugli avvisi. Nell'ultima puntata, torneremo e sperimenteremo con gli altri due.
Andiamo avanti e informiamo iOS che la nostra app desidera ricevere notifiche di avviso.
Apri PokeAppDelegate.m (o qualsiasi altra cosa il tuo delegato dell'app si chiami) e aggiorna l'applicazione: didFinishLaunchingWithOptions: callback per assomigliare a questo:
- Applicazione (BOOL): applicazione (UIApplication *) didFinishLaunchingWithOptions: (NSDictionary *) launchOptions // Registrazione per notifiche di avviso [application registerForRemoteNotificationTypes: UIRemoteNotificationTypeAlert]; // Aggiungi la vista del controller di visualizzazione alla finestra e visualizza. [window addSubview: viewController.view]; [window makeKeyAndVisible]; return YES;
Nota che stiamo trasmettendo solo UIRemoteNotificationTypeAlert, perché tutto ciò che vogliamo ricevere in questo momento è un avviso. Se vuoi ricevere altre notifiche, vai avanti e aggiungili con un bit o:
[...] Tipi: UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge];
Con queste modifiche al nostro delegato dell'app, il sistema operativo inizierà la registrazione con il servizio di notifica push Apple. Se riesce, invierà un'applicazione: didRegisterForRemoteNotificationsWithDeviceToken: messaggio al delegato dell'app con il token del dispositivo; se fallisce, invierà un'applicazione: didFailToRegisterForRemoteNotificationsWithError: message. Idealmente, dovresti implementare entrambi.
Aggiungi i seguenti due metodi al delegato dell'app per gestire i due possibili risultati della registrazione:
- (void) application: (UIApplication *) application didRegisterForRemoteNotificationsWithDeviceToken: (NSData *) deviceToken // TODO: passare il token al nostro server NSLog (@ "Registrarsi con successo per le notifiche push"); - (void) application: (applicazione UIApplication *) didFailToRegisterForRemoteNotificationsWithError: (NSError *) error // Informa l'utente che la registrazione non è riuscita NSString * failureMessage = @ "Si è verificato un errore durante il tentativo di \ register per le notifiche push."; UIAlertView * failureAlert = [[UIAlertView alloc] initWithTitle: @ "Errore" message: failureMessage delegate: nil cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [failureAlert show]; [failureAlert release];
Torneremo alla callback di successo in un segmento successivo - per ora, registra solo un messaggio veloce. La nostra callback di errore informa l'utente dell'errore. Si noti che la registrazione sarà sempre fallire su iPhone Simulator, in quanto non supporta le notifiche push. Per testare correttamente il codice, è necessario utilizzare un dispositivo reale.
Ora che abbiamo creato un'app di base da parte nostra, passiamo alla parte di Apple e mettiamo tutto a posto nel portale di provisioning iOS.
Se sei già un membro pagante del Programma per sviluppatori iOS, accedi al Dev Center iOS e fai clic sul link a destra per accedere al portale di provisioning iOS. Se non sei ancora un membro, puoi iscriverti a $ 99 qui.
La prima cosa che devi fare è assicurarti di aver già impostato il tuo account con i certificati di sviluppo necessari e di aver aggiunto i tuoi dispositivi. Le istruzioni per farlo non rientrano nell'ambito di questo tutorial, ma Apple fornisce un assistente di installazione, nonché video e altre risorse per guidarti attraverso il processo. Controlla la sezione "Home" del portale per maggiori informazioni.
Il prossimo passo è creare un nuovo ID app. Per associare correttamente i push inviati al servizio con un'applicazione specifica, viene utilizzato il servizio di notifica push Apple non supporta le app con un identificativo del bundle "jolly" (cioè un identificatore con un asterisco finale come com.acme. *). Essendo il motivo, il servizio push deve essere in grado di identificare l'app specifica a cui appartiene la spinta, ma gli identificatori di caratteri jolly consentono di creare più app con lo stesso profilo di provisioning. Pertanto, se hai già un identificatore di caratteri jolly impostato per lo sviluppo, dovrai crearne uno nuovo per abilitare il supporto delle notifiche push. Se il tuo ID app non utilizza un identificatore di bundle jolly, puoi saltare questo passaggio.
Fai clic sul pulsante "Nuovo ID app" nell'angolo in alto a destra. Inserisci le informazioni della tua app e fai clic sul pulsante "Invia".
Trova l'ID app appena creato (o già esistente) nell'elenco e fai clic sul link "Configura" sulla destra. Nella pagina visualizzata, seleziona "Abilita per il servizio di notifica push Apple".
Se "Abilita per il servizio di notifica push Apple" non viene visualizzato, probabilmente l'ID dell'app non è configurato correttamente. Torna al passaggio precedente e assicurati di non aver inserito un identificatore di bundle con caratteri jolly.
Noterai che sono elencati due certificati: uno per lo sviluppo e l'altro per la produzione. L'APNS ha server di prova e server di produzione dal vivo. Ogni utilizza e richiede un certificato SSL client diverso. I server di prova possono essere utilizzati per inviare push alle app create con profili di provisioning di sviluppo; i server di produzione possono essere utilizzati per inviare push alle app create con profili di provisioning di distribuzione (build Ad Hoc, In House o App Store).
Per ora, non dobbiamo preoccuparci troppo della distinzione, ma questo entrerà in gioco nella prossima puntata quando inizieremo a creare il nostro account su Urban Airship.
Poiché al momento lavoreremo con una build di sviluppo della nostra app, fai clic sul pulsante "Configura" per il certificato SSL Push di sviluppo. Seguire le istruzioni nella casella che appare per creare una richiesta di firma del certificato, quindi fare clic su "Continua".
Seleziona il CSR appena generato facendo clic su "Scegli file", quindi su "Genera" per generare il certificato SSL.
Dovresti vedere un indicatore di avanzamento e successivamente la seguente conferma:
Fai clic su "Continua" per accedere alla fase di download e installazione. Ci occuperemo di cosa fare con questo certificato nella seconda parte di questo tutorial, ma per ora andare avanti e fare clic su "Download" per scaricare il nuovo certificato SSL del client APNS.
Successivamente, dobbiamo creare un profilo di provisioning per il nostro nuovo ID app (o esistente, non jolly).
Nota: secondo la Guida alle notifiche locali e push di Apple, se hai già creato un profilo di provisioning per l'ID app esistente precedente per abilitare le notifiche push per quell'ID, sarà necessario modificare il profilo in qualche modo (ad esempio cambiare il nome) in modo che il portale lo rigeneri con le autorizzazioni push necessarie.
È possibile verificare che un profilo abbia le autorizzazioni push appropriate aprendolo in un editor di testo. Dovrebbe avere una chiave aps-environment:
Di nuovo nel portale di provisioning iOS, seleziona "Provisioning" dal menu principale a sinistra. Fare clic sulla scheda "Sviluppo" e selezionare il pulsante "Nuovo profilo". Immettere un nome descrittivo nel campo Nome profilo e selezionare i certificati per gli sviluppatori che possono utilizzare questo profilo per creare app. Se ti sei registrato come individuo, verrà elencato un solo certificato (il tuo); se ti sei registrato come azienda, potrebbero esserne presenti più di una.
Scegli l'ID app creato nel passaggio precedente (o quello esistente) dall'elenco ID app e seleziona i dispositivi su cui desideri testare l'app dall'elenco in basso. Quindi fare clic su "Invia" per generare il nuovo profilo di provisioning.
Dopo pochi minuti, il tuo profilo verrà emesso e un pulsante "Download" apparirà nella colonna Azioni a destra (potrebbe essere necessario aggiornare il browser). Fatto ciò, fare clic su di esso per scaricare il nuovo profilo di provisioning di sviluppo.
Per installare il tuo profilo, trascina il file .mobileprovision appena scaricato su Xcode o iTunes nel Dock.
Torna al tuo progetto in Xcode.
Seleziona "Modifica bersaglio attivo" Colpisci "" dal menu Progetto. Passare alla scheda Proprietà e immettere l'identificatore del gruppo impostato nel portale di provisioning iOS in precedenza (nel nostro caso, com.tutsplus.mobile.pushdemo).
Successivamente, passa alla scheda Costruisci. Assicurati che la configurazione selezionata in alto sia Debug. Trova la sezione Firma codice nella tabella. Il secondo elemento nell'elenco dovrebbe essere Identità di firma del codice e dovrebbe avere un elemento figlio, Qualsiasi dispositivo iOS. Questa impostazione indica a Xcode quale profilo di provisioning utilizzare per firmare la tua app quando costruisci un dispositivo iOS. Il valore per Qualsiasi dispositivo iOS deve essere "Sviluppatore iPhone (attualmente corrisponde a 'Sviluppatore iPhone: [Nome tuo]' [...])."
Questa opzione attualmente selezionata è il Selettore profilo automatico. Guarda l'ID del bundle della tua app (che abbiamo impostato nell'ultimo passaggio) e trova il profilo di provisioning con un ID corrispondente (o un ID jolly che corrisponde). Anche se è probabile che tu vada via lasciando questa opzione così com'è, in genere cerco di minimizzare le potenziali fonti di errori nella firma del codice selezionando il profilo che voglio usare manualmente.
E questo è tutto! Hai creato con successo un nuovo progetto iPhone e lo hai configurato per le notifiche push! Nella prossima puntata, inizieremo a parlare del lato server delle cose e di come inviare effettivamente una push alla tua app appena creata.