Les notifications Push sous Windows Phone 7 sont assez facile à mettre en place. Nous allons dans cet article voir comment elles fonctionnent. Si vous n’êtes pas familier avec les différents types de notification (live tile, toast, raw) je vous invite à lire cet article de la msdn avant.
Fonctionnement
Pour s’abonner aux notifications, voilà les étapes à suivre :
Abonnement au service de notification (une seule fois) :
- 1 : Enregistrement du téléphone sur le serveur de notification (notre méthode Open précédente)
- 2 : On récupère le ChannelUri
- 3 : On envoie l’Uri à notre serveur
Ensuite lorsque l’on souhaite envoyer une notification :
- 4 : Notre serveur poste la notification en utilisant l’uri précédemment reçu
- 5 : Le serveur Microsoft pousse la notification vers le terminal
Ouverture d’un canal
Afin de recevoir les notifications, il faut que l’application ouvre un canal de notification, mais auparavant il faut faire attention que l’on a pas déjà un canal associé à l’application :
myChannel = HttpNotificationChannel.Find("monCanal");
if (myChannel == null)
{
myChannel = new HttpNotificationChannel("monCanal");
myChannel.Open();
}
Envoie du ChannelUri à votre serveur
Si vous souhaitez utiliser les notifications Toast ou Raw, envoyez le channelUri à votre serveur dès que vous recevez l’évènement ’ChannelUriUpdated’, afin de pouvoir recevoir dès que possible les notifications.
Toutefois si vous n’utilisez que les notifications Tile, rien de vous empêche de l’envoyer qu’à la fermeture de l’application, ce qui a deux avantages à mes yeux :
- diminuer le nombre de requêtes entre le téléphone et le serveur, si l’utilisateur entre temps se désabonne des notifications push, puis se réabonne, etc.., vous économiserez du temps.
- si vous souhaitez mettre à jour la tuile à la fermeture de l’application, vous devez donc envoyer des informations à votre serveur pour qu’il la mette à jour, autant utiliser cette requête pour envoyer le channelUri en même temps.
Attention, la channelUri peut changer avec le temps, il faudra donc vérifier à chaque fois si la channelUri a changé afin de l’envoyer à votre serveur.
S’abonner aux notifications
Une fois le canal de notification enregistré, il suffit de s’abonner pour recevoir des notifications. Ne vous enregistrez qu’aux notifications dont vous avez besoin, pas besoin de s’enregistrer aux 3 types si vous ne les utilisez pas.
Par exemple, pour demander à recevoir les notifications ‘Toast’ :
if (myChannel != null && !myChannel.IsShellToastBound)
{
myChannel.BindToShellToast();
}
et pour recevoir les notifications de type Live Tile :
if (myChannel != null && !myChannel.IsShellTileBound)
{
Collection ListOfAllowedDomains = new Collection { new Uri("http://www.rudyhuyn.com") };
myChannel.BindToShellTile(ListOfAllowedDomains);
}
A noter que par rapport aux toasts, on a utilisé un paramètre supplémentaire correspondant à l’uri du site. En effet, sans ce paramètre supplémentaire, le windows phone 7 ne vous permettra que d’afficher des ressources locales en tuile, hors si vous souhaitez générer des tuiles dynamiques, vous n’aurez pas d’autres choix que de les générer sur votre serveur et d’envoyer un lien vers celle-ci en push. L’uri permet donc ici d’indiquer les serveurs que l’on autorise pour la tuile.
Se désabonner des notifications
Pour se désabonner, il suffit de fermer le canal de notification :
if (myChannel != null) myChannel.Close();
Il sera aussi indispensable d’indiquer à votre serveur que l’application ne souhaite plus recevoir des notifications afin de ne pas envoyer des notifications qui seront rejeté ensuite par le serveur de Microsoft
