• Programmazione Android
  • CORSI ONLINE
  • Web Agency

Logo

Corsi di programmazione web e mobile online
Navigation
  • Home
  • CORSI ONLINE
  • Tutorial Pratici
  • GUIDE COMPLETE
    • Corso completo di C
    • Corso videogame con Cocos2d
    • Programmazione Cocoa Touch
  • Sezioni
    • Libri e manuali
    • Tips & Tricks
    • Risorse utili
    • Strumenti di Sviluppo
    • Materiale OpenSource
    • Framework
    • Guide Teoriche
    • Guide varie
    • Grafica e Design
    • iPad
    • News
    • Video Tutorial
    • Windows Phone
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

T#016 – Implementiamo le Push Notifications

By Redazione | on 8 Dicembre 2009 | 27 Comments
Senza categoria

apple-push-notification-service Oggi vedremo come implementare le notifiche push nelle nostre applicazioni. Ringraziamo lo sviluppatore Cristian Gintili, creatore delle applicazioni Million, Clienti e Genoa (che potete trovare su App Store), il quale ci ha concesso la pubblicazione di questa utilissima guida disponibile anche sul suo sito personale iCGdev.

La prima cosa da fare per poter utilizzare le notifiche push nella propria applicazione iPhone, è creare i profili ed i certificati. Accedere quindi all’iPhone Developer Program Portal ed andare nella sezione App IDs. Non è possibile utilizzare un profilo con wild-card (ovvero con l’asterisco), per cui se non avete già un profilo senza wild-card, dovete crearne uno nuovo cliccando su New App ID.

Dopo aver creato l’App ID, cliccate su Configure e create il certificato SSL seguendo la procedura guidata (molto semplice). Al termine del procedimento, scaricate il certificato appena creato (file con estensione .cer).

Ora dovete installare il certificato appena scaricato: doppio click su di esso ed il certificato verrà importato nel Portachiavi. Nel Portachiavi, andate nella categoria “I miei certificati” e noterete un certificato chiamato “Apple Development Push Services“, cliccateci sopra col tasto destro del mouse e cliccate su Esporta. Salvate il file con il nome apns-dev-cert.p12 Tornate al certificato “Apple Development Push Services” ed espandetelo cliccando sulla freccia grigia alla sua sinistra. Noterete una chiave, cliccateci sopra col tasto destro del mouse ed esportatela salvandola col nome apns-dev-key.p12.

Aprite il terminale e posizionatevi nella cartella dove avete esportato i file sopra citati. Date i seguenti comandi, uno dopo l’altro (inserendo la password e la passphrase dove richiesto):

openssl pkcs12 -clcerts -nokeys -out apns-dev-cert.pem -in apns-dev-cert.p12

openssl pkcs12 -nocerts -out apns-dev-key.pem -in apns-dev-key.p12

openssl rsa -in apns-dev-key.pem -out apns-dev-key-noenc.pem

cat apns-dev-cert.pem apns-dev-key-noenc.pem > apns-dev.pem

Tra tutti i file generati, a voi interessa il file apns-dev.pem che dovrete “uppare” sul vostro server. L’installazione dei certificati è terminata. Ora dovete installare i profili. Tornate nell’iPhone Developer Program Portal ed andate nella sezione Provisioning. Create un nuovo profilo e scaricatelo. Importatelo in Xcode utilizzando la stessa procedura che avete usato per gli altri profili.
Questa procedura va eseguita due volte: una per i certificati e profili per il development (ovvero quando testate l’applicazione) e una per la distribution (ovvero quando inviate l’applicazione alla Apple).

N.B. Il certificato ed il profilo valgono solo per una singola applicazione. Per cui se volete inserire le push notifications in più applicazioni, dovrete installare più certificati e profili.

Ora viene la parte della programmazione, che si divide in ulteriori due parti: server e client.

Per utilizzare le Notifiche Push, dovete disporre di un vostro server remoto sempre accessibile, nel quale dovrete eseguire uno script (o un demone, un processo, un’applicazione, ecc ecc) che si occuperà di comunicare con i server della Apple.

Di seguito vi posto uno script PHP che, ogni volta che viene richiamato, invia una richiesta al server della Apple, il quale poi si occuperà di inviare la notifica all’iPhone dove è installata la vostra applicazione.

 $message);
      
      if ($badge)
            $body['aps']['badge'] = $badge;
      if ($sound)
            $body['aps']['sound'] = $sound;
     
      /* End of Configurable Items */
      $ctx = stream_context_create();
      stream_context_set_option($ctx, ’ssl’, ‘local_cert’, ‘apns-dev.pem’);

      // assume the private key passphase was removed.
      // stream_context_set_option($ctx, ’ssl’, ’passphrase’, $pass);
      $fp = stream_socket_client(’ssl://gateway.sandbox.push.apple.com:2195′, $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);

      if (!$fp) {
            print “Failed to connect $err $errstrn”;
            return;
      } else {
            print “Connection OK\n”;
      }

      $payload = json_encode($body);
      $msg = chr(0) . pack(’n',32) . pack(’H*’, str_replace(’ ’, ”, $deviceToken)) . pack(’n',strlen($payload)) . $payload;
      print “sending message :” . $payload . “\n”;
      fwrite($fp, $msg);
      fclose($fp);
?>

Questo file lo potete e dovete modificare a vostro piacimento, oppure potete utilizzare un altro tipo di sistema per creare uno script lato server. Dovete “uppare” sul vostro server, sia lo script qui sopra (od un altro al suo posto) sia il certificato apns-dev.pem creato in precedenza.

N.B.: per il development, dovete utilizzare il server ssl://gateway.sandbox.push.apple.com:2195 per testare le push notifications, mentre per la distribution dovete utilizzare il server ssl://gateway.push.apple.com:2195

La programmazione lato server è terminata, ora non resta che occuparci della parte client, ovvero la parte che riguarda la vostra applicazione.

A questo punto abbiamo due cose da fare:

  • abilitare le notifiche push
  • prelevare il token del device.

La Apple raccomanda di prelevare il token ogni volta che viene avviata l’applicazione. Questo perchè, in caso di ripristino, il token cambia, per cui, se non lo aggiornate, le notifiche push non arriveranno più su quel device.

Per abilitare le notifiche push, inserite la seguente stringa nel metodo applicationDidFinishLaunching nell’appDelegate:

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge];

Dopodichè, sempre nell’appDelegate, impostate i seguenti metodi:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken{

// Qui registrate e/o inviate il token

}

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)err{

// Qui intercettate eventuali errori avvenuti se la registrazione fallisce

}

La parte client è già bella che finita!

Bene, questo è tutto quello che c’è da sapere sull’implementazione delle Push Notifications nelle vostre applicazioni.

Share this story:
  • tweet

Tags: Objective-cprogrammazionepushpush notificationTutorial Pratici

Recent Posts

  • Parte il percorso programmatori iOS in Swift su devACADEMY.it

    20 Dicembre 2017 - 0 Comment
  • Android, crittografare dati velocemente con Encryption

    24 Settembre 2018 - 0 Comment
  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • Okio, libreria per ottimizzare l’input/output in Java

    27 Agosto 2018 - 0 Comment

Related Posts

  • Microservizi per logiche applicative di grandi dimensioni

    27 Luglio 2016 - 0 Comment
  • Uno sguardo al runtime Objective-c

    10 Settembre 2013 - 0 Comment
  • Andrea Picchi: Programmare con Objective-C 2.0 per iOS e OS X

    27 Febbraio 2013 - 10 Comments

Author Description

27 Responses to “T#016 – Implementiamo le Push Notifications”

  1. 8 Dicembre 2009

    HackYouriPhone

    🙂 Questa te l’ho trovata io 🙂

  2. 9 Dicembre 2009

    walter

    Interessantissimo come sempre!

    Ci sono un paio di punti che non mi sono chiari…

    1.
    Nello script php la prima variabile $deviceToken = $token
    Non mi è ben chiaro il valore di $token da dove è derivato.

    2.
    – (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken{

    // Qui registrate e/o inviate il token

    }
    Come si registra il token? Con che tipo di richiesta viene inviato?

    3.
    Attenzione agli apici, singoli e doppi, probabilmente derivati da un file word, vanno sostituiti con i più comuni ‘ e “.

  3. 9 Dicembre 2009

    iCGdev

    1. E’ il valore che tu dovrai registrare sul tuo server (in un database, file, ecc ecc). Con lo script non fai altro che recuperarlo.

    2. Devi salvare il token sul tuo server. Quindi dovrai richiamare una pagina sul server passandogli il token e tramite uno script (php o altro) lo salvi (in un database, file, ecc ecc).

    Una cosa che non ho specificato (perchè già presente sulla documentazione ufficiale apple): il token va registrato senza spazi ed i simboli “” (quindi basta fare un trimming ed un replace).

  4. 9 Dicembre 2009

    walter

    capisco,
    Mi dispiace ma con xcode sono alle prime armi quindi direi che alcuni passaggi sono fondamentali, come la necessita di possedere una cartella in scrittura e/o creare uno script che utilizzi l’ftp e/o necessità di un db sul server.
    Magari non tutti gli xcoder conoscono anche un linguaggio di scripting o come funziona un server web.
    Credo che il bello di questo sito è la semplicità delle informazioni.
    Naturalmente è una mia opinione personale, quindi da prendere con le pinze!

    Con quali metodi può inviare xcode la richiesta e/o token al server?

    Prendo come esempio che utilizzi un GET (es. index.php?deviceToken=token) quindi di seguito la prima riga:

    $deviceToken = $_GET[‘deviceToken’];

    Amo le conversazioni costruttive ed è solo per capire meglio come agire.

    p.s.
    Gli apici che vengono mostrati in stile sql nel codice vengono modificati direttamente da wordpress quindi non è frutto di un file word 🙂

  5. 9 Dicembre 2009

    iCGdev

    Purtroppo in una guida come questa non si possono trattare tutti gli argomenti, come i webserver e l’invio di una richiesta GET ad un server remoto. Per due motivi principali:

    1. Viene troppo dispendioso e dispersivo
    2. Google (per i web server) e la documentazione Apple (per le richeste get/post) spiegano già ampiamente l’argomento.

    Comunque, nella fattispecie, per inviare il token tramite richiesta GET, è sufficiente utilizzare gli oggetti NSURLRequest ed NSURLConnection

  6. 10 Dicembre 2009

    walter

    Ti ringrazio! 🙂

  7. 3 Marzo 2010

    Duccio

    Una collezione completa di classi PHP per interagire con Apple Push Notification Service è disponibile su Google Code: http://code.google.com/p/apns-php/

  8. 3 Marzo 2010

    Staff devAPP

    Grazie per la segnalazione, faremo presto un articolo su questa collezione che inseriremo nella sezione “Materiale OpenSource” 😉

  9. 4 Marzo 2010

    ApnsPHP: Classi PHP per le Apple Push Notification (OpenSource) | devAPP

    […] Se questo è quello che cercate, vi consiglio di visitare questo utilissimo link, segnalatoci da un nostro utente (Duccio): […]

  10. 29 Maggio 2010

    Gino

    Una cosa da aggiungere importantissima…
    ———————————————————-
    Non tutti i server apachi/php possono far girare il suddetto script! in pratica bisogna che siano attive le estensioni SSL per richiamare tramite socket un indirizzo ssl://gateway.push.apple.com:2195 o ssl://gateway.sandbox.push.apple.com:2195 per la distribuzione…

    Alla fine sono riuscito a far funzionare le push notification dentro all’app PuntiPatentePlus, ma ho dovuto rimediare un server installato privatamente perchè sui miei domini di register.it non c’è stato verso di farli andare!!!! Idem su quelli di aruba sia su macchine windows che linux… quindi il mio consiglio è… prima di addentrarvi e sviluppare fare qualche test sui domini a disposizione!

    ciao
    Gino

  11. 24 Settembre 2010

    sarnieri

    Su ioProgrammo di questo mese (settembre 2010) ho scritto un lungo articolo sulle push notification, completo di esempio funzionante lato client e lato server!

  12. 21 Ottobre 2010

    iCiccio

    Ciao, sto seguendo questa guida per creare notifiche push del mio sito WP, ma mi blocco ai comandi al terminale, infatti il primo comando è OK, ma il secondo
    openssl rsa -in apns-dev-key.pem -out apns-dev-key-noenc.pem
    mi da errore:

    Error opening input file apns-dev-key.p12
    apns-dev-key.p12: No such file or directory

    Come mai?

  13. 21 Ottobre 2010

    iCiccio

    Scusate ho risolto, solo che ho scoperto che con ARUBA si fa poco, non avendo il supporto SSL… UFFF

    Consigli??

  14. 22 Maggio 2011

    Fabio

    Salve, ho implementato le notifiche nella mia app di test, solo che non capisco come poter fare per conoscere i device token a cui inviare le notifiche…
    se setto a mano il device token tutto funziona, ma per automatizzare la cosa come posso fare?

  15. 28 Maggio 2011

    Installoso Appsinco

    Quotone!! Anche io vorrei saperlo|


    Fabio:

    Salve, ho implementato le notifiche nella mia app di test, solo che non capisco come poter fare per conoscere i device token a cui inviare le notifiche…
    se setto a mano il device token tutto funziona, ma per automatizzare la cosa come posso fare?

  16. 14 Settembre 2011

    Matteo

    Come faccio dall’App a memorizzare il token dell’iphone su DataBase??

  17. 13 Dicembre 2011

    SadSoul

    Un semplice domanda, tutto funziona in fase di test, ma una volta che l’APP è approvata, bisogna modificare oltre all’indirizzo di invio, anche il certificato .pem, giusto? Io ho utilizzato le stesse linee di comando per apns-dev.pem, ma il risultato è che i device si registrano correttamente, token salvati, ma notifica push non arriva, qualcuno sa darmi qualche dritta?

    Grazie!

  18. 9 Gennaio 2012

    Dario De Nicola

    Salve, ho un server dedicato su aruba con estensione ssl, ma non riesco a far funzionare lo script lato server per far partire le notifiche, in particolare mi dà errore nel momento in cui si connette al server apple, senza indicarmi nè numero nè messaggio di errore.
    Avete idea di quale possa essere il problema?
    Domanda: sul server va istallato il certificato usato per la connessione o basta semplicemente uploadarlo?
    Grazie

  19. 27 Gennaio 2012

    Failed to register with error: Error Domain=NSCocoaErrorDomain Code=3000 | iOS Dev Blog

    […] completezza, il codice da inserire nel metodo application:didFinishLaunchingWithOptions: dell’AppDelegate […]

  20. 29 Gennaio 2012

    Installare il certificato per le Push Notification | iOS Dev Blog

    […] una annotazione riguardante l’utile articolo di devAPP sulle Notifiche Push. Quando si parla di installare il certificato ci si riferisce, una volta […]

  21. 7 Febbraio 2012

    Giuliano

    Salve,
    Ho pronto al seguire il tutorial ma mi sono perso a questo punto:

    Tornate al certificato “Apple Development Push Services” ed espandetelo cliccando sulla freccia grigia alla sua sinistra. Noterete una chiave, cliccateci sopra col tasto destro del mouse ed esportatela salvandola col nome apns-dev-key.p12.

    Espandetelo cosa significa? Ho provato ad aprirlo ma non vedo nessuna chiave. Potreste aiutarmi con questo passaggio?
    Grazie Giuliano

  22. 21 Febbraio 2012

    daniela

    scusa due domande:

    nei certificati quando esporto il primo e cli cambio il nome in apns-dev-cert.p12 mi da errore e dice che non può avere estensione .p12 bensì cer. !

    seconda cosa quando faccio :
    Tornate al certificato “Apple Development Push Services” ed espandetelo cliccando sulla freccia grigia alla sua sinistra…
    non ho nessuna freccia grigia per visualizzare la chiave…. come posso fare ?

    Grazie Daniela

  23. 11 Marzo 2012

    daniela


    Installoso Appsinco:

    Quotone!! Anche io vorrei saperlo|


    Fabio:

    Salve, ho implementato le notifiche nella mia app di test, solo che non capisco come poter fare per conoscere i device token a cui inviare le notifiche…
    se setto a mano il device token tutto funziona, ma per automatizzare la cosa come posso fare?


    Matteo:

    Come faccio dall’App a memorizzare il token dell’iphone su DataBase??

    Non c’è nessuno che lo sa?

    Grazie

  24. 2 Aprile 2012

    Valerio

    Ragazzi io sto provando a far funzionare queste benedette notifiche da diversi giorni…ho continui problemi con il server che non è abilitato alla comunicazione sicura SSL…acquistando un certificato da qualche autorità (vedi ENTRUST citata nella guida della Apple) pensate che riesca a risolvere la situazione?

    thanks all!!!

  25. 23 Agosto 2012

    Achille

    Ciao, poichè il deviceuuid è stato non solo deprecato ma sembra che apple non accetti più app che ne fanno uso, volevo sapere se è obbligatorio o può essere rimosso dal codice. Da un’occhiata veloce al codice mi sembra che non serva per inoltrare la push ai server apple.

  26. 6 Novembre 2012

    Adriatik


    Installoso Appsinco:

    Quotone!! Anche io vorrei saperlo|


    Fabio:

    Salve, ho implementato le notifiche nella mia app di test, solo che non capisco come poter fare per conoscere i device token a cui inviare le notifiche…
    se setto a mano il device token tutto funziona, ma per automatizzare la cosa come posso fare?

    Ovviamente devi inviare il deviceToken ad un server il quale lo registra in db. Così facendo, al momento in cui si desidera inviare una notifica push a tutti i devices, basterà fare un ciclo di tutti i deviceToken.

  27. 20 Novembre 2012

    Alessandro

    Ciao, ho seguito la guida e mi ha aiutato un po’ a iniziare … premesso che su mountain laion nel portachiavi non mi fa vedere la seconda chiave ma solo il certificato… la buona notizia è che posso esportarlo direttamente in pem … speriamo bene …

    La domanda ora è un’altra… il mio server (hostingsolutions) mi blocca gli stream e sono costretto ad usare cURL al posto di stream_context_create e compagnia. Qualcuno hai idea di come effettuare la conversione?

Leave a Reply

Your email address will not be published. Required fields are marked *


*
*

Corso online di programmazione android e java

SEZIONI

  • Android
  • Comunicazioni
  • Contest
  • Corsi ed Eventi
  • Corso completo di C
  • Corso programmazione videogiochi
  • Framework
  • Grafica e Design
  • Guida rapida alla programmazione Cocoa Touch
  • Guide Teoriche
  • Guide varie
  • iPad
  • Le nostre applicazioni
  • Libri e manuali
  • Materiale OpenSource
  • News
  • Pillole di C++
  • Progetti completi
  • Risorse utili
  • Strumenti di Sviluppo
  • Swift
  • Tips & Tricks
  • Tutorial Pratici
  • Video Tutorial
  • Windows Phone

Siti Amici

  • Adrirobot
  • Allmobileworld
  • Apple Notizie
  • Apple Tribù
  • Avvocato360
  • Blog informatico 360°
  • bubi devs
  • fotogriPhone
  • GiovaTech
  • iApp-Mac
  • iOS Developer Program
  • iPodMania
  • MelaRumors
  • Meritocracy
  • SoloTablet
  • TecnoUser
  • Privacy & Cookie Policy
©2009-2018 devAPP - All Rights Reserved | Contattaci
devAPP.it è un progetto di DEVAPP S.R.L. - Web & Mobile Agency di Torino
Str. Volpiano, 54 - 10040 Leini (TO) - C.F. e P.IVA 11263180017 - REA TO1199665 - Cap. Soc. € 10.000,00 i.v.

devACADEMY.it

Vuoi imparare a programmare?

Iscriviti e accedi a TUTTI i corsi con un’unica iscrizione.
Oltre 70 corsi e migliaia di videolezioni online e in italiano a tua disposizione.

ISCRIVITI SUBITO