Come richiedere, creare e salvare un canale di notifica (HTML)

[ Questo articolo è rivolto agli sviluppatori per Windows 8.x e Windows Phone 8.x che realizzano app di Windows Runtime. Gli sviluppatori che usano Windows 10 possono vedere Documentazione aggiornata ]

Nota  Se non usi JavaScript, vedi Come richiedere, creare e salvare un canale di notifica (XAML).

 

Puoi aprire un URI (Uniform Resource Identifier) di canale tramite il quale l'app può ricevere notifiche push, quindi puoi inviare il canale al server, che lo usa per inviare le notifiche, e chiuderlo quando non è più necessario. Un canale è un indirizzo univoco che rappresenta un singolo utente in un singolo dispositivo per un'app o un riquadro secondario specifico.

È consigliabile richiedere un nuovo canale a ogni avvio dell'app e aggiornare il server cloud quando l'URI viene modificato. Per altre informazioni, vedi Osservazioni.

Importante  I canali di notifica scandono automaticamente dopo 30 giorni.

 

Cosa sapere

Tecnologie

  • Windows Runtime

Prerequisiti

  • Conoscenza operativa di termini e concetti correlati a riquadri e notifiche oltre che di XML. In questo argomento si presuppone inoltre che tu sappia già come creare una semplice app di Windows Store in JavaScript usando le API di Windows Runtime.
  • Familiarità con i concetti, i requisiti e il funzionamento delle notifiche push e di Servizi notifica Push Windows (WNS). Per queste informazioni, vedi la panoramica di Servizi notifica Push Windows.

Istruzioni

Passaggio 1: Richiedere un URI di canale

Questo esempio richiede un URI di canale. La richiesta viene effettuata alla piattaforma client di notifica, che a sua volta richiede l'URI di canale a WNS. Dopo il completamento della richiesta, il valore restituito è un oggetto PushNotificationChannel contenente l'URI.


var channel;
var pushNotifications = Windows.Networking.PushNotifications;
var channelOperation = pushNotifications.PushNotificationChannelManager.createPushNotificationChannelForApplicationAsync();

return channelOperation.then(function (newChannel) {
    channel = newChannel;
    // Success. The channel URI is found in newChannel.uri.
    },
    function (error) {
        // Could not create a channel. Retrieve the error through error.number.
    }
);

Passaggio 2: Inviare l'URI di canale al server

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

Importante  Dovrai inviare tali informazioni al server in modo sicuro. È consigliabile richiedere all'app di autenticarsi con il server al momento della trasmissione dell'URI di canale. Codifica le informazioni e usa un protocollo protetto, ad esempio HTTPS.

 


var serverUrl = "https://www.contoso.com";

var xhr = new WinJS.xhr({
        type: "POST", 
        url: serverUrl,
        headers: {"Content-Type": "application/x-www-form-urlencoded"},
        data: "channelUri=" + channel.uri
}).then(function (req) {
        // Channel URI successfully sent to server. Retrieve the response from req.response.
    },
    function (req) {
        // Could not send channel URI to server. Retrieve the error through req.statusText.
    }
);

Osservazioni

Richiesta di canali

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

  1. Richiedi un canale.
  2. Confronta il nuovo canale con quello precedente. Se il canale è identico a quello precedente, non devi fare altro. È necessario che l'app archivi il canale in locale ogni volta che lo invia al servizio, in modo che tu possa successivamente effettuare il confronto.
  3. Se il canale è diverso, invia il nuovo canale al servizio Web. Includi la logica di gestione degli errori che prevede sempre l'invio di un nuovo canale nei seguenti casi:
    • L'app non ha mai inviato un canale al servizio Web.
    • L'ultimo tentativo eseguito dall'app di inviare il canale al servizio Web ha avuto esito negativo.

Non è detto che chiamate diverse al metodo createPushNotificationChannelForApplicationAsync restituiscano sempre un canale diverso. Se il canale non è cambiato dall'ultima chiamata, la tua app può evitare di inviare di nuovo lo stesso canale al servizio per non generare traffico Internet inutilmente. Si possono assegnare a un'app più URI di canale validi contemporaneamente. Dal momento che ogni canale univoco rimane valido fino alla scadenza, si può chiedere senza problemi un nuovo canale perché questo non influirà sull'ora di scadenza di eventuali canali precedenti.

Richiedendo un nuovo canale ogni volta che l'app viene richiamata, aumenti le possibilità di avere sempre accesso a un canale valido. Questo è particolarmente importante se per lo scenario del riquadro o dell'avviso popup è essenziale che il contenuto sia sempre in tempo reale. Se credi che un utente potrebbe non eseguire l'app più di una volta ogni 30 giorni, puoi implementare un'attività in background per eseguire il codice di richiesta canale su base regolare.

Gestione degli errori nelle richieste di canale

Se la connessione Internet non è disponibile, la chiamata al metodo createPushNotificationChannelForApplicationAsync può non riuscire. Per gestire il problema, aggiungi la logica per effettuare un nuovo tentativo al codice illustrato al passaggio 2. Ti consigliamo di aggiungere tre tentativi con un intervallo di 10 secondi tra un tentativo non riuscito e l'altro. Se tutti e tre i tentativi non riescono, per riprovare la tua app deve attendere finché non viene avviata nuovamente dall'utente.

Chiusura dei canali

L'app può interrompere immediatamente il recapito delle notifiche per tutti i canali chiamando il metodo close. Sebbene non sia una procedura comune, in alcuni scenari può essere necessario interrompere il recapito di tutte le notifiche all'app. Ad esempio, se l'app prevede l'uso degli account utente e un utente si disconnette dall'app, è prevedibile che il riquadro non mostri più le informazioni personali di tale utente. Per cancellare correttamente il riquadro in questione e interrompere il recapito delle notifiche, esegui i passaggi seguenti:

  1. Interrompi tutti gli aggiornamenti del riquadro chiamando il metodo PushNotificationChannel.close per qualsiasi canale di notifica che recapita all'utente notifiche di tipo riquadro, avviso popup o non elaborato. Chiamando il metodo close ti accerti che non vengano recapitate al cliente altre notifiche per tale utente.
  2. Cancella il contenuto del riquadro chiamando il metodo TileUpdater.clear che rimuove i dati dell'utente precedente dal riquadro.

Argomenti correlati

Esempio di notifiche push e periodiche

Panoramica di Servizi notifica Push Windows (WNS)

Guida introduttiva: Invio di una notifica push

Come eseguire l'autenticazione con Servizi notifica Push Windows (WNS)

Come gestire la scadenza e il rinnovo del canale

Linee guida ed elenco di controllo per le notifiche push

Intestazioni delle richieste e delle risposte per Servizi notifica Push Windows