Windows Phone 7 Beta upgrade 5
Con questo post abbiamo quasi finito il porting delle nostre applicazioni e librerie, nonchè le demo e i test alla versione Beta degli SDK.
In questo post ci dedichiamo alle modifiche alle classi del servizio Push Notification
Per la parte teorica fate riferimento ai due articoli di Mighell:
1) http://thinkmobile.it/blogs/mighell/archive/2010/06/18/microsoft-push-notification-service.aspx
2) http://thinkmobile.it/blogs/mighell/archive/2010/06/20/come-funziona-il-push-notification-service-in-windows-phone-7-series.aspx
Tra l’altro Mighell sta producendo un articolo completo che verrà pubblicato subito prima o subito dopo le ferie.
In questo post intanto anticipo le modifiche alle classi per coloro che hanno lavorato con la April CTP.
La classe NotificationChannelExceptionEventArgs è stata sostituita con NotificationChannelErrorEventArgs. La classe espone le informazioni sul tipo di errore, compreso il nuovo meccanismo di segnalazione del livello della batteria che potrebbe inibile l’arrivo di messaggi.
Ad esempio è possibile individuare i seguenti “Errori”; ho tolto dai vari case il nostro codice reale.
La seconda modifica riguarda il metodo BindToShellNotification che è divento BindToShellTile. Questo metodo accetta l’elenco degli Uri ammessi per l’invio di “risorse da remoto”
L’eccezione NotificationChannelExistException è stata rimossa e non sostituita per semplificare il codice che adesso può
1) Cercare se il canale utilizzato è già aperto (classica Find presente anche nella versione di Marzo)
2) Se il canale non viene trovato, si procede alla creazione e al binding verso la Shell
3) Si può testare IsShellTileBound e IsShellToastBound per evitare di legare nuovamente un canale già aperto alla Shell del telefono. Occhio che non si può eseguire un doppio BindToShell. Nel caso si debbano modificare le impostazioni si può eseguire un Unbind tramite il metodo UnbindToShellTile e UnbindToShellToast
La classe ShellEntryPoint è stata rimossa e adesso è possibile assegnare direttamente gli Uri per le risorse/domini esterni.
L’evento ShellNotificationReceived è diventato ShellToastNotificationReceived.
E’ cambiato anche leggermente il formato per inviare notifiche verso il canale.
Per le notifiche Tile occorre indicare (X-Notification class è in realtà opzionale e vale 1)
sendNotificationRequest.ContentType = "text/xml";
sendNotificationRequest.Headers.Add("X-WindowsPhone-Target", "token");
sendNotificationRequest.Headers.Add("X-NotificationClass", "<batching interval>");
Il messaggio può essere il seguente:
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<wp:Notification xmlns:wp=\"WPNotification\">
<wp:Tile>
<wp:BackgroundImage>path</wp:BackgroundImage>
<wp:Count>count</wp:Count>
<wp:Title>tile</wp:Title>
</wp:Tile>
</wp:Notification>
Per i Toast invece occorre (come sempre X-Notification class è opzionale)
sendNotificationRequest.ContentType = "text/xml";
sendNotificationRequest.Headers.Add("X-WindowsPhone-Target", "toast");
sendNotificationRequest.Headers.Add("X-NotificationClass", "<batching interval>");
e il payload è rimasto invariato.
Ecco un esempio di Tile con immagine che “arriva” da internet di una nostra applicazione:
