Comment demander, créer et enregistrer un canal de notification

Vous pouvez ouvrir un URI (Uniform Resource Identifier) de canal sur lequel votre application peut recevoir des notifications Push. Vous pouvez ensuite envoyer le canal à votre serveur qui l’utilise pour envoyer des notifications Push et le fermer lorsque vous n’en avez plus besoin. Un canal est une adresse unique qui représente un seul utilisateur sur un seul appareil, pour une application ou une vignette secondaire spécifique.

Vous devez demander un nouveau canal chaque fois que votre application est lancée et mettre à jour le serveur cloud lorsque l’URI change. Pour plus d’informations, consultez Remarques.

Important

Les canaux de notification expirent automatiquement au bout de 30 jours.

Bon à savoir

Technologies

  • Windows Runtime

Prérequis

Instructions

Étape 1 : Ajouter des déclarations d’espace de noms

Windows.UI.Notifications inclut les API toast.

using Windows.UI.Notifications;
using Windows.Data.Xml.Dom;
using Windows.Networking.PushNotifications;

Étape 2 : Demander un URI de canal

Cet exemple demande un URI de canal. La demande est envoyée à la plateforme cliente de notification, qui à son tour demande l’URI du canal à WNS. Une fois la requête terminée, la valeur retournée est un objet PushNotificationChannel qui contient l’URI.

PushNotificationChannel channel = null;

try
{
    channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
}

catch (Exception ex)
{ 
    // Could not create a channel. 
}

Étape 3 : Envoyer l’URI du canal à votre serveur

L’URI du canal est empaqueté dans une requête HTTP POST et envoyé au serveur.

Important

Vous devez envoyer ces informations à votre serveur de manière sécurisée. Vous devez exiger que l’application s’authentifie auprès du serveur lorsqu’elle transmet l’URI du canal. Chiffrez les informations et utilisez un protocole sécurisé tel que HTTPS.

String serverUrl = "http://www.contoso.com";

// Create the web request.
HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create(serverUrl);
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
byte[] channelUriInBytes = System.Text.Encoding.UTF8.GetBytes("ChannelUri=" + channel.Uri);

// Write the channel URI to the request stream.
Stream requestStream = await webRequest.GetRequestStreamAsync();
requestStream.Write(channelUriInBytes, 0, channelUriInBytes.Length);

try
{
    // Get the response from the server.
    WebResponse response = await webRequest.GetResponseAsync();
    StreamReader requestReader = new StreamReader(response.GetResponseStream());
    String webResponse = requestReader.ReadToEnd();
}

catch (Exception ex)
{
    // Could not send channel URI to server.
}

Remarques

Canaux de demande

Vous devez demander un nouveau canal chaque fois que votre application est appelée, à l’aide de la logique suivante :

  1. Demandez un canal.
  2. Comparez le nouveau canal avec votre canal précédent. Si le canal est le même, vous n’avez pas besoin d’effectuer d’autres actions. Notez que cela nécessite que votre application stocke le canal localement chaque fois que l’application l’envoie correctement à votre service, afin que vous disposiez du canal à comparer ultérieurement.
  3. Si le canal a changé, envoyez le nouveau canal à votre service web. Incluez la logique de gestion des erreurs qui envoie toujours un nouveau canal dans les cas suivants :
    • Auparavant, votre application n’a jamais envoyé de canal au service web.
    • La dernière tentative d’envoi du canal au service web de votre application n’a pas réussi.

Différents appels à la méthode CreatePushNotificationChannelForApplicationAsync ne retournent pas toujours un autre canal. Si le canal n’a pas changé depuis le dernier appel, votre application doit économiser l’effort et le trafic Internet en ne renvoyant pas ce même canal à votre service. Une application peut avoir plusieurs URI de canal valides en même temps. Étant donné que chaque canal unique reste valide jusqu’à son expiration, il n’y a aucun dommage à demander un nouveau canal, car cela n’affecte pas le délai d’expiration des canaux précédents.

En demandant un nouveau canal chaque fois que votre application est appelée, vous optimisez vos chances d’avoir toujours accès à un canal valide. Cela est particulièrement important s’il est essentiel pour votre scénario de vignette ou de toast que le contenu soit toujours en direct. Si vous craignez qu’un utilisateur n’exécute pas votre application plus d’une fois tous les 30 jours, vous pouvez implémenter une tâche en arrière-plan pour exécuter régulièrement votre code de demande de canal.

Gestion des erreurs dans les requêtes de canal

L’appel à la méthode CreatePushNotificationChannelForApplicationAsync peut échouer si Internet n’est pas disponible. Pour gérer ce problème, ajoutez une logique de nouvelle tentative au code indiqué à l’étape 2. Nous vous recommandons trois tentatives avec un délai de 10 secondes entre chaque tentative infructueuse. Si les trois tentatives échouent, votre application doit attendre la prochaine fois que l’utilisateur la lancera pour réessayer.

Fermeture des canaux

Votre application peut immédiatement arrêter la remise des notifications sur tous les canaux en appelant la méthode PushNotificationChannel.Close . Bien qu’il ne soit pas courant pour votre application de le faire, il peut y avoir certains scénarios dans lesquels vous souhaitez arrêter toute remise de notification à votre application. Par instance, si votre application a le concept de comptes d’utilisateur et qu’un utilisateur se déconnecte de cette application, il est raisonnable de s’attendre à ce que la vignette n’affiche plus les informations personnelles de cet utilisateur. Pour effacer correctement la vignette de contenu et arrêter la remise des notifications, procédez comme suit :

  1. Arrêtez toutes les mises à jour de vignettes en appelant la méthode PushNotificationChannel.Close sur l’un de vos canaux de notification qui délivrent des notifications par vignette, toast, badge ou brutes à un utilisateur. L’appel de la méthode Close garantit qu’aucune autre notification pour cet utilisateur ne peut être remise au client.
  2. Effacez le contenu de la vignette en appelant la méthode TileUpdater.Clear pour supprimer les données de l’utilisateur précédent de la vignette.