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 spécifique ou une vignette secondaire.

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 après 30 jours.

Bon à savoir

Technologies

  • Windows Runtime

Prérequis

  • Connaissance des concepts, exigences et opérations des services de notification Push (WNS) Windows Push Notification Services( Push Notification Services). Ces informations sont présentées dans la vue d’ensemble de Windows Push Notification Services (WNS).

Instructions

Étape 1 : Ajouter des déclarations d’espaces 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 requête est envoyée à la plateforme cliente de notification, qui demande à son tour l’URI du canal à partir de 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.
}

Notes

Demande de canaux

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

  1. Demander un canal.
  2. Comparez le nouveau canal à 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 ayez le 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 :
    • 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.

Les appels différents à 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 conserver 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 préjudice lors de la demande d’un nouveau canal, car il n’affecte pas l’heure 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 vignette ou votre scénario toast que le contenu soit toujours actif. Si vous craignez qu’un utilisateur n’exécute pas votre application plusieurs fois toutes 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 cela, 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 lance pour réessayer.

Fermeture des canaux

Votre application peut immédiatement arrêter la remise de notifications sur tous les canaux en appelant la méthode PushNotificationChannel.Close. Bien qu’il ne soit pas courant que votre application le fasse, il peut y avoir certains scénarios dans lesquels vous souhaitez arrêter toute remise de notification à votre application. Par exemple, 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 ne montre plus les informations personnelles de l’utilisateur. Pour effacer correctement la vignette du contenu et arrêter la remise des notifications, procédez comme suit :

  1. Arrêtez toutes les mises à jour de vignette en appelant la méthode PushNotificationChannel.Close sur l’un de vos canaux de notification qui fournissent des vignettes, toast, badge ou notifications 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.