Condividi tramite


Come richiedere, creare e salvare un canale di notifica

È possibile aprire un URI (Uniform Resource Identifier) del canale su cui l'app può ricevere notifiche push. È quindi possibile inviare il canale al server che lo usa per inviare notifiche push e chiuderlo quando non è più necessario. Un canale è un indirizzo univoco che rappresenta un singolo utente in un singolo dispositivo, per un'app specifica o un riquadro secondario.

È necessario richiedere un nuovo canale ogni volta che l'app viene avviata e aggiornare il server cloud quando cambia l'URI. Per informazioni dettagliate, vedere Osservazioni.

Importante

I canali di notifica scadono automaticamente dopo 30 giorni.

Informazioni importanti

Tecnologie

  • Windows Runtime

Prerequisiti

  • Familiarità con le notifiche push e i concetti di Windows Push Notification Services (WNS), requisiti e funzionamento. Queste informazioni sono descritte nella panoramica di Servizi notifica push Windows (WNS).

Istruzioni

Passaggio 1: Aggiungere le dichiarazioni dello spazio dei nomi

Windows.UI.Notifications include le API di tipo avviso popup.

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

Passaggio 2: Richiedere un URI del canale

In questo esempio viene richiesto un URI del canale. La richiesta viene effettuata alla piattaforma client di notifica, che a sua volta richiede l'URI del canale da WNS. Al termine della richiesta, il valore restituito è un oggetto PushNotificationChannel che contiene l'URI.

PushNotificationChannel channel = null;

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

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

Passaggio 3: Inviare l'URI del canale al server

L'URI del canale viene incluso in un pacchetto in una richiesta HTTP POST e inviato al server.

Importante

Dovresti inviare queste informazioni al server in modo sicuro. Devi richiedere che l'app esegua l'autenticazione con il server quando trasmette l'URI del canale. Crittografare le informazioni e usare un protocollo sicuro, ad esempio 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.
}

Osservazioni:

Richiesta di canali

Dovresti richiedere un nuovo canale ogni volta che viene richiamata l'app usando la logica seguente:

  1. Richiedere un canale.
  2. Confrontare il nuovo canale con il canale precedente. Se il canale è lo stesso, non è necessario eseguire altre azioni. Tieni presente che questo richiede che l'app archivii il canale in locale ogni volta che l'app lo invia correttamente al servizio, in modo che tu abbia il canale da confrontare in un secondo momento.
  3. Se il canale è stato modificato, inviare il nuovo canale al servizio Web. Includere la logica di gestione degli errori che invia sempre un nuovo canale nei casi seguenti:
    • L'app non ha mai inviato un canale al servizio Web in precedenza.
    • L'ultimo tentativo dell'app di inviare il canale al servizio Web non è riuscito.

Le diverse chiamate al metodo CreatePushNotificationChannelForApplicationAsync non restituiscono sempre un canale diverso. Se il canale non è cambiato dall'ultima chiamata, l'app deve risparmiare lavoro e traffico Internet non inviando nuovamente lo stesso canale al servizio. Un'app può avere più URI di canale validi contemporaneamente. Poiché ogni canale univoco rimane valido fino alla scadenza, non c'è alcun danno nella richiesta di un nuovo canale perché non influisce sull'ora di scadenza di tutti i canali precedenti.

Richiedendo un nuovo canale ogni volta che viene richiamata l'app, è possibile massimizzare le probabilità di avere sempre accesso a un canale valido. Ciò è particolarmente importante se è fondamentale per il riquadro o lo scenario di tipo avviso popup che il contenuto sia sempre attivo. Se si è preoccupati che un utente potrebbe non eseguire l'app più di una volta ogni 30 giorni, è possibile implementare un'attività in background per eseguire regolarmente il codice della richiesta di canale.

Gestione degli errori nelle richieste di canale

La chiamata al metodo CreatePushNotificationChannelForApplicationAsync può non riuscire se Internet non è disponibile. Per gestire questo problema, aggiungi la logica di ripetizione dei tentativi al codice illustrato nel passaggio 2. È consigliabile eseguire tre tentativi con un ritardo di 10 secondi tra ogni tentativo non riuscito. Se tutti e tre i tentativi hanno esito negativo, l'app deve attendere fino alla successiva avvio dell'app per riprovare.

Chiusura dei canali

L'app può interrompere immediatamente il recapito delle notifiche in tutti i canali chiamando il metodoPushNotificationChannel.Close . Anche se non sarà comune per la tua app, potrebbero esserci alcuni scenari in cui vuoi arrestare tutto il recapito delle notifiche alla tua app. Ad esempio, se l'app ha il concetto di account utente e un utente si disconnette da tale app, è ragionevole aspettarsi che il riquadro non mostri più le informazioni personali dell'utente. Per cancellare correttamente il riquadro del contenuto e arrestare il recapito delle notifiche, è necessario eseguire le operazioni seguenti:

  1. Arresta tutti gli aggiornamenti dei riquadri chiamando il metodo PushNotificationChannel.Close su uno dei canali di notifica che recapitano notifiche di tipo riquadro, avviso popup, badge o non elaborato a un utente. La chiamata al metodo Close garantisce che non sia possibile recapitare ulteriori notifiche per l'utente al client.
  2. Cancella il contenuto del riquadro chiamando il metodo TileUpdater.Clear per rimuovere i dati dell'utente precedente dal riquadro.