AntonioPelleriti.it [aka z9]

I code, therefore I am

NAVIGATION - SEARCH

Windows Phone 8.1 e la simulazione di push notification

Il nuovo emulatore di Windows Phone messo a disposizione dal Windows Phone SDK 8.1, permette di testare in maniera molto semplice e produttiva applicazioni che debbano fare uso di push notification, senza dover implementare la parte server di invio di queste ultime.

Il nuovo emulatore mette a disposizione nuovi strumenti, che appariranno come tab nella finestra Additional Tools, attivabile cliccando sulle freccette dell'emulatore stesso. Fra le novità vi è appunto la tab Notifications, come potete notare dall'immagine seguente:

 

Appena mi sono accorto di questa nuova funzione, ho provato subito ad utilizzarla, e devo dire che l'utilizzo stesso non è stato immediato (probabilmente la tarda ora aveva fatto brutti scherzi)! Quindi ho deciso di scrivere questo post, per aiutare chi dovesse incontrare le stesse difficoltà.

Innanzitutto c'è da dire che per testare tale funzionalità, l'app dovrà prevedere la gestione delle push notification, visualizzando magari delle notifiche Toast, aggiornando le tile con testi, immagini, badge, e così via.

Proviamo quindi a fare subito un semplice esempio pratico. Avviate Visual Studio 2013 (con Update 2 RC installato), e create un nuovo progetto Windows Phone (va bene sia un progetto Windows Phone Store App, quindi basato sulla nuova architettura Windows Runtime, che un progetto Windows Phone Silverlight 8.1, tanto l'importante è poter utilizzare il nuovo emulatore).

Dopo aver creato il progetto, dobbiamo innanzitutto impostare l'app in maniera che essa possa visualizzare delle Toast Notifications. Quindi basta fare doppio click sul file Package.appxmanifest, e nella sezione Notifications, impostare il valore Yes in corrispondenza della voce Toast Capable.

 

A questo punto, è necessario ottenere un canale sul quale viaggeranno le push notification dal Windows Push Notification Service verso l'app, e quindi al caricamento della pagina principale, all'interno del gestore delll'evento Loaded, ho inserito il seguente codice:

private async void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
        {
            var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();

            channel.PushNotificationReceived += (s, args) => { Debug.WriteLine(args.NotificationType); };
            Debug.WriteLine(channel.Uri.ToString());
        }

Esso crea un oggetto channel, e vi associa un gestore per l'evento PushNotificationReceived (in questo caso gestito inline con una espressione lambda, ma tanto lo utilizzeremo solo per stampare una stringa di debug) e stampa nella finestra di debug l'Uri del canale appena creato.

Il progetto, per lo scopo che ci siamo prefissi, cioè quello di testare il nuovo tool per le notifications, è finito.

Quindi ho avviato il debug, ho aperto gli additional tools, ho abilitato la checkbox Simulation, ed ho cercato di inviare una notifica push simulata. Semplice, ma troppo bello per essere vero: non funzionava!

In realtà, il tool stesso indica la strada corretta da seguire: Enable Simulation, then redeploy and launch the push app to get the channel URI.

In parole povere, basta seguire la seguente procedura:

  1. avviare la prima volta l'app e quindi l'emulatore
  2. aprire i tools e abilitare la checkbox Simulation
  3. interrompere il debug
  4. lanciare nuovamente l'app
  5. cliccare il pulsante refresh per ottenere il channel URI

Ora è possibile scegliere una tipologia di notifica, modificare eventualmente il template, e inviarle all'app cliccando il pulsante Send.

La seguente immagine mostra una Toast Notification appena ricevuta dall'app sull'emulatore, le stesse notifiche sono mostrate naturalmente anche all'interno del nuovo Action Center introdotto da Windows Phone 8.1.