23

Jan

Push notifications in Mango – Tile multiple, notifiche locali, deep link e altro ancora

Nella versione 7.0 di Windows Phone le notifiche push sono l’unico meccanismo che abbiamo a disposizione per interagire con l’utente anche quando non sta utilizzando la nostra applicazione. In Mango, come abbiamo visto nei tutorial precedenti, questo non è più vero: grazie ad alarms, reminders, background agents, etc. sono tanti i modi con cui possiamo eseguire operazioni anche quando l’applicazione è chiusa.

Questo però non significa che le notifiche push abbiano perso importanza: se dobbiamo gestire scenari in cui è richiesta una comunicazione in tempo reale (ad esempio, avvisare l’utente che la sua squadra del cuore ha segnato) le notifiche push rimangono la soluzione migliore.

Ecco perciò che Microsoft ha introdotto tutta una serie di novità che vanno a potenziare l’architettura delle notifiche push e introducono nuovi scenari.

Tile animate

Se siete possessori di un device Windows Phone, saprete già che alcune tile generate dalle applicazioni native sono in grado di animarsi. Pensiamo ad esempio a quando pinnate in home page un contatto: ad intervalli di tempo predefiniti, la tile (che di default mostra foto e nome) ruota per mostrare l’ultimo aggiornamento di stato della persona sui social networks.

In Mango abbiamo anche noi la possibilità di sfruttare questa caratteristica e visualizzare delle informazioni sul “retro” della tile della nostra applicazione.

Queste informazioni sono:

  • BackBackgroundImage: è un parametro di tipo Uri che rappresenta l’immagine che vogliamo visualizzare sul retro.
  • BackTitle: è una stringa che funge da titolo per il retro della tile.
  • BackContent: questa proprietà, di tipo stringa, è disponibile solo per il retro della tile e rappresenta un testo che possiamo visualizzare al suo interno.

Come possiamo vedere, al contrario del lato principale, non è supportata la proprietà Count.

Deep link

Vi ho già parlato di questa importante novità nel post dedicato ad Alarms e Reminders: i deep link sono una feature introdotta in Mango che da la possibilità a servizi esterni (i reminder, le notifiche toast, le tile, ecc.) di aprire la nostra applicazione direttamente su una pagina specifica, con il supporto anche ai parametri in query string. In questo modo, possiamo intercettare nella nostra applicazione il contesto in cui è stata effettuata l’azione e comportarci di conseguenza.

Utilizzare i deep link è molto semplice: sia le notifiche di tipo toast che di tipo tile supportano una proprietà chiamata NavigationUri, che contiene il percorso della nostra pagina e gli eventuali parametri in query string.

Tile multiple

Attualmente abbiamo la possibilità di “pinnare” in home page la sola icona della nostra applicazione. Mango ci da la possibilità, direttamente da codice, di creare tile multiple, che si posizioneranno in home screen esattamente come se si trattassero di altre applicazioni. Ogni tile potrà essere aggiornata (sia usando le notifiche locali, che quelle tradizionali) in maniera separata e potrà perciò mostrare informazioni differenti.

Il cuore delle tile multiple è il deep link: ogni tile avrà una proprietà NavigationUri che la contraddistingue e che rappresenta la pagina che vogliamo aprire quando viene fatto tap su quella tile. Gli scenari sono molteplici: un’applicazione meteo potrebbe darci la possibilità di creare una tile per ognuna delle città della quale vogliamo seguire le condizioni atmosferiche; un client Twitter può creare una tile per ognuna delle ricerche che vogliamo seguire.

La cosa interessante è che le notifiche push (sia tradizionali che locali, come vedremo a breve) sono in grado di aggiornare le tile in maniera indipendente: ecco perciò che potremo aggiornare le tile del meteo con le condizioni atmosferiche della specifica città; oppure mostrare, per ogni tile relativa ad una ricerca su Twitter, il numero di nuovi tweet non ancora letti.

Ciò che identifica una tile è il suo NavigationUri, che deve essere diverso per ognuna di esse: questa informazione è essenziale per capire come poter aggiornare (sia localmente che con una notifica remota) le tile in maniera indipendente.

Notifiche locali

Nella versione attuale di Windows Phone l’unico modo per inviare una notifica push è quello di realizzare un’infrastruttura server che comunichi con il Push Notification Service di Microsoft. A volte però si tratta di un lavoro ridondante, dato che non abbiamo necessità di comunicazione in tempo reale oppure le informazioni sulle quali sono basate le nostre notifiche risiedono in locale.

Mango introduce il supporto alle notifiche toast e alle notifiche tile di tipo locale, ovvero generate dall’applicazione stessa. Vediamole insieme.

Notifiche toast

Le notifiche toast locali possono essere visualizzate solamente ad applicazione chiusa: questo significa che l’unico modo per generarle è tramite un background agent. Se istanziate una notifica toast locale e la lanciate direttamente da dentro l’applicazione, non otterrete alcuna eccezione ma, semplicemente, non verrà visualizzata.

Ecco un esempio di notifica toast locale:

ShellToast toast = new ShellToast
      {
      Title = "Title",
      Content = "Description",
      NavigationUri = new Uri("/DetailView.xaml?ID=5")
      };
      toast.Show();

Quello che facciamo è semplicemente definire un’istanza della classe ShellToast e valorizzarne le tre proprietà fondamentali: titolo, descrizione e (opzionalmente), un NavigationUri, nel caso vogliamo sfruttare i deep link di Mango. Infine, invocando il metodo Show mostriamo a video la notifica.

Notifiche tile

Le notifiche tile di tipo locale possono aggiornare qualsiasi componente della tile, incluse le nuove proprietà introdotte per visualizzare informazioni sul retro della stessa e, al contrario delle notifiche toast, possono essere lanciate anche dall’applicazione stessa, oltre che da un background agent.

Vediamo un esempio di aggiornamento della tile da codice:

StandardTileData data = new StandardTileData
      {
      Title = "Title",
      BackgroundImage = new Uri("http://www.contoso.com/FrontImage.png"),
      BackTitle = "Back title",
      BackContent = "Back content",
      BackBackgroundImage = new Uri("http://www.contoso.com/BackImage.png")
      };
      ShellTile.ActiveTiles.FirstOrDefault().Update(data);

Il cuore della notifica (che ne contiene tutte le informazioni) è l’oggetto StandardTileData. Vi faccio notare solamente la sintassi con cui aggiorniamo la tile, ovvero recuperando con una query LINQ la prima istanza dell’IEnumerable ActiveTiles e chiamando il metodo Update. Questo perchè Mango, come spiegato poco fa, supporta le tile multiple: ecco perciò che ActiveTiles contiene l’elenco di tutte le tile pinnate in home page. Nell’esempio, con il metodo FirstOrDefault andiamo a recuperare la prima, ovvero quella di default.

Nel prossimo post

Nel prossimo post vedremo qualche esempio di codice più pratico: vedremo come creare tile multiple dalla nostra applicazione e come aggiornarle in maniera indipendente l'una dall’altra.

by Il blog di Matteo Pagani on 1/23/2012
Post archive