Technology Experience
.NET World

Push Notification con Windows 8, aspetti tecnici e ragionamenti vari

Nelle ultime settimane ho studiato pesantemente tutta la nuova architettura che Microsoft ha messo in piedi per permettere a noi dev di inviare push notification alle nostre app Metro. Partivo con un po’ di vantaggio per il semplice fatto che avevo già fatto la stessa cosa con Windows Phone 7, ma ci ho comunque dovuto sbattere un po’ la testa. Alcune cose sono cambiate, come è logico che sia.

Facciamola breve. Gli ingredienti di cui avete bisogno per mettere in piedi le push notification per la vostra app Metro sono i seguenti:

  • ovviamente, un’app Metro-style Windows 8. La vostra app deve permettere ai vostri utenti di sottoscriversi alle notifiche push: questo vuol dire banalmente mettere un controllo tipo ToggleSwitch nei settings della vostra app grazie al quale l’utente può scegliere se ricevere oppure no le notifiche (poi sta a voi magari fargli scegliere se vuole ricevere solo le tile notification, oppure solo le toast, le badge, etc. etc.). E’ buona norma farvi restituire l’esito di questa operazione, per informare l’utente se tutto è andato bene oppure no: questo può essere un semplice bool oppure qualcosa di più complesso. Quando una vostra app si sottoscrive alle push notification riceve un url, che identifica univocamente quel device e quell’applicazione
  • un vostro “cloud-service”, ovvero un servizio Web che al momento opportuno spara a tutti i vostri utenti la notifica. In quasi tutte le mie app Windows Phone 7 ho praticamente un servizio WCF che fra le altre cose serve anche a questo scopo. In pratica, quindi, vi serve un qualsiasi servizio di hosting che vi metta a disposizione database SQL Server, l’hosting di servizi WCF, etc. etc.
  • tornando al punto (1), quando l’utente attiva il ToggleSwitch invoca un metodo esposto dal servizio WCF, che si occupa di memorizzare server-side gli url che vengono associati al proprio dispositivo (dico dispositivo perchè potrebbe essere un pc, un notebook, un ultrabook, un tablet, un Surface, un qualsiasi dispositivo su cui gira Windows 8)

I punti qui sopra sono ovviamente un po’ più complessi, andrebbero sviscerati fino a riempire libri su libri. Io la faccio molto semplice, basta googlare per raccogliere informazioni in quantità. E devo anche aggiungere che MSDN è decisamente migliorata sotto questo punto di vista, rispetto ai primi tempo con Windows Phone. Adesso potete davvero trovare quickstart, tutorial, esempi di codice, xml, etc. etc.

Per cui una volta messa in piedi tutta l’infrastruttura software, la cosa è piuttosto semplice. Quando si scatena un determinato evento, il servizio WCF passa in rassegna la tabella dei vostri utenti che vogliono ricevere le notifiche: per ciascuno dei vostri utenti avete un url che lo identifica in modo inequivocabile ed univoco. A questo url inviate un certo blocco XML ed il gioco è fatto. L’XML può identificare qualsiasi tipo di notifica, anche se di un solo tipo per volta: non potete specificare con un unico XML una notifica toast e di tipo tile. All’interno di una notifica tile, però, potete specificare sia quella square che quella wide (ovvero: sia quella quadrata, che quella rettangolare): questo è indispensabile, perchè dal punto di vista del servizio WCF non sapete quale tile sta usando l’utente, e quindi è necessario mandargliele entrambe. Se sta usando quella square, vedrà quella, altrimenti quella wide.

Parliamo un secondo di settings della nostra app Windows 8 Metro-style.
Generalmente, con un’app Windows 8 verrebbe le tentazione di salvare tutti i settings all’interno di quelle roaming. Questo significa che i vostri settings viaggiano su tutti i device Windows 8 su cui state usando quell’app, e rimangono sincronizzate. Se cambiate un’impostazione su un PC, vi ritroverete la stessa impostazione su tutti gli altri device, insomma. Attenzione, però: parlando di push notification non è una buona idea. Nei settings delle mie app Windows 8 che fanno uso di push notification mantengo sempre due informazioni: un bool che mi dice se le notifiche sono attive, e l’url univoco di quel device. Questi due settings li salvo all’interno dei settings locali e non su quelle roaming, perchè sono impostazioni specifiche del device e non dell’app. Magari su un PC desktop (che non ha problemi di salvaguardia della batteria) vorrei sempre lasciare abilitate le notifiche, mentre potrebbe non essere la stessa cosa su un tablet. Su un device voglio le notifiche attive, sull’altro no. Quindi è opportuno decidere cosa salvare nei settings di tipo roaming, e cosa salvare nei settings di tipo local.

Forse la cosa più difficile è stato capire quali tipi di tile sono supportati dal sistema di notifiche (e quale XML inviare per ciascuna di esse, soprattutto).
Per questo vi lascio questa pagina:

http://msdn.microsoft.com/library/windows/apps/Hh761491

che riporta tutte le tile, siano essere quadrate o rettangolari. Ce ne sono un bel po’, che supportano solo testo, solo immagine, oppure testo ed immagine insieme, con diverse formattazioni.

Lo so, rispetto a tanti altri, questo post è un po’ sconclusionato: ho solo voluto riassumere in modo sparso un po’ di concetti con cui mi sono scontrato nei giorni scorsi, lavorando sulle push notification.

Send to Kindle

Igor Damiani

La sua passione per l'informatica nasce nella prima metà degli anni '80, quando suo padre acquistò un Texas Instruments TI-99. Da allora ha continuato a seguire l'evoluzione sia hardware che software avvenuta nel corso degli anni. E' un utente, un videogiocatore ed uno sviluppatore software a tempo pieno. Igor ha lavorato e lavora anche oggi con le più moderne tecnologie Microsoft per lo sviluppo di applicazioni: .NET Framework, XAML, Universal Windows Platform, su diverse piattaforme, tra cui spiccano Windows 10 piattaforme mobile. Numerose sono le app che Igor ha creato e pubblicato sul marketplace sotto il nome VivendoByte, suo personale marchio di fabbrica. Adora mantenere i contatti attraverso Twitter e soprattutto attraverso gli eventi delle community .NET.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.