Panoramica delle notifiche non elaborate
Le notifiche non elaborate sono brevi notifiche push di uso generico. Vengono inviate esclusivamente allo scopo di impartire istruzioni e non includono un componente di interfaccia utente. Come per altre notifiche push, la funzionalità Windows Push Notification Services (WNS) recapita notifiche non elaborate dal servizio cloud all'app.
Puoi usare le notifiche non elaborate per diversi scopi, tra cui per attivare l'app per eseguire un'attività in background se l'utente ha concesso all'app l'autorizzazione per farlo. Usando WNS per comunicare con l'app, puoi evitare il sovraccarico di elaborazione della creazione di connessioni socket persistenti, l'invio di messaggi HTTP GET e altre connessioni da servizio a app.
Importante
Per comprendere le notifiche non elaborate, è consigliabile acquisire familiarità con i concetti illustrati nella panoramica di Servizi notifica push Windows (WNS).
Come per le notifiche push di tipo avviso popup, riquadro e notifica, viene eseguito il push di una notifica non elaborata dal servizio cloud dell'app tramite un URI (Uniform Resource Identifier) del canale assegnato a WNS. WNS, a sua volta, recapita la notifica al dispositivo e all'account utente associato a tale canale. A differenza di altre notifiche push, le notifiche non elaborate non hanno un formato specificato. Il contenuto del payload è completamente definito dall'app.
Come illustrazione di un'app che potrebbe trarre vantaggio dalle notifiche non elaborate, si esaminerà un'app di collaborazione documenti teorica. Si considerino due utenti che stanno modificando lo stesso documento contemporaneamente. Il servizio cloud, che ospita il documento condiviso, può usare le notifiche non elaborate per notificare a ogni utente quando le modifiche vengono apportate dall'altro utente. Le notifiche non elaborate non contengono necessariamente le modifiche apportate al documento, ma segnalano invece la copia di ogni utente dell'app per contattare la posizione centrale e sincronizzare le modifiche disponibili. Usando le notifiche non elaborate, l'app e il relativo servizio cloud possono ridurre il sovraccarico della gestione delle connessioni persistenti durante l'intera apertura del documento.
Funzionamento delle notifiche non elaborate
Tutte le notifiche non elaborate sono notifiche push. Pertanto, la configurazione necessaria per inviare e ricevere notifiche push si applica anche alle notifiche non elaborate:
- Per inviare notifiche non elaborate, è necessario disporre di un canale WNS valido. Per altre informazioni sull'acquisizione di un canale di notifica push, vedere Come richiedere, creare e salvare un canale di notifica.
- Devi includere la funzionalità Internet nel manifesto dell'app. Nell'editor del manifesto Microsoft Visual Studio questa opzione è disponibile nella scheda Funzionalità come Internet (client). Per altre informazioni, vedere Funzionalità.
Il corpo della notifica è in un formato definito dall'app. Il client riceve i dati come stringa con terminazione Null (HSTRING) che deve essere compresa solo dall'app.
Se il client è offline, le notifiche non elaborate verranno memorizzate nella cache da WNS solo se l'intestazione X-WNS-Cache-Policy viene inclusa nella notifica. Tuttavia, una sola notifica non elaborata verrà memorizzata nella cache e recapitata una volta che il dispositivo torna online.
Esistono solo tre possibili percorsi per l'esecuzione di una notifica non elaborata sul client: verranno recapitati all'app in esecuzione tramite un evento di recapito delle notifiche, inviati a un'attività in background o eliminati. Pertanto, se il client è offline e WNS tenta di recapitare una notifica non elaborata, la notifica viene eliminata.
Creazione di una notifica non elaborata
L'invio di una notifica non elaborata è simile all'invio di una notifica push di tipo riquadro, avviso popup o notifica badge, con queste differenze:
- L'intestazione HTTP Content-Type deve essere impostata su "application/octet-stream".
- L'intestazione HTTP X-WNS-Type deve essere impostata su "wns/raw".
- Il corpo della notifica può contenere qualsiasi payload stringa di dimensioni inferiori a 5 KB, ma non deve essere una stringa vuota.
Le notifiche non elaborate devono essere usate come messaggi brevi che attivano l'app per eseguire un'azione, ad esempio per contattare direttamente il servizio per sincronizzare una quantità maggiore di dati o per apportare una modifica dello stato locale in base al contenuto della notifica. Si noti che le notifiche push WNS non possono essere garantite per essere recapitate, quindi l'app e il servizio cloud devono tenere conto della possibilità che la notifica non elaborata non raggiunga il client, ad esempio quando il client è offline.
Per altre informazioni sull'invio di notifiche push, vedere Avvio rapido: Invio di una notifica push.
Ricezione di una notifica non elaborata
Esistono due vie attraverso le quali l'app può ricevere notifiche non elaborate:
- Tramite eventi di recapito delle notifiche durante l'esecuzione dell'applicazione.
- Tramite attività in background attivate dalla notifica non elaborata se l'app è abilitata per eseguire attività in background.
Un'app può usare entrambi i meccanismi per ricevere notifiche non elaborate. Se un'app implementa sia il gestore eventi di recapito delle notifiche che le attività in background attivate dalle notifiche non elaborate, l'evento di recapito delle notifiche avrà la priorità quando l'app è in esecuzione.
- Se l'app è in esecuzione, l'evento di recapito delle notifiche avrà la priorità sull'attività in background e l'app avrà la prima opportunità di elaborare la notifica.
- Il gestore eventi di recapito delle notifiche può specificare, impostando la proprietà PushNotificationReceivedEventArgs.Cancel dell'evento su true, che la notifica non elaborata non deve essere passata alla relativa attività in background al termine del gestore. Se la proprietà Cancel è impostata su false o non è impostata (il valore predefinito è false, la notifica non elaborata attiverà l'attività in background dopo che il gestore eventi di recapito delle notifiche ha eseguito il proprio lavoro.
Eventi di recapito delle notifiche
L'app può usare un evento di recapito delle notifiche (PushNotificationReceived) per ricevere notifiche non elaborate mentre l'app è in uso. Quando il servizio cloud invia una notifica non elaborata, l'app in esecuzione può riceverla gestendo l'evento di recapito delle notifiche nell'URI del canale.
Se l'app non è in esecuzione e non usa attività in background), qualsiasi notifica non elaborata inviata a tale app viene eliminata da WNS alla ricezione. Per evitare di sprecare le risorse del servizio cloud, è consigliabile implementare la logica nel servizio per tenere traccia se l'app è attiva. Esistono due origini di queste informazioni: un'app può indicare in modo esplicito al servizio che è pronto per iniziare a ricevere notifiche e WNS può indicare al servizio quando arrestarsi.
L'app invia una notifica al servizio cloud: l'app può contattare il servizio per segnalare che l'app è in esecuzione in primo piano. Lo svantaggio di questo approccio è che l'app può finire per contattare il servizio molto frequentemente. Tuttavia, ha il vantaggio che il servizio saprà sempre quando l'app è pronta per ricevere notifiche non elaborate in ingresso. Un altro vantaggio è che quando l'app contatta il servizio, il servizio sa inviare notifiche non elaborate all'istanza specifica di tale app anziché trasmettere.
Il servizio cloud risponde ai messaggi di risposta WNS: il servizio app può usare le informazioni X-WNS-NotificationStatus e X-WNS-Device Connessione ionStatus restituite da WNS per determinare quando interrompere l'invio di notifiche non elaborate all'app. Quando il servizio invia una notifica a un canale come HTTP POST, può ricevere uno di questi messaggi nella risposta:
- X-WNS-NotificationStatus: eliminato: indica che la notifica non è stata ricevuta dal client. È un presupposto sicuro che la risposta eliminata sia causata dall'app non più in primo piano nel dispositivo dell'utente.
- X-WNS-Device Connessione ionStatus: disconnesso o X-WNS-Device Connessione ionStatus: tempconnected: indica che il client Windows non ha più una connessione a WNS. Si noti che per ricevere questo messaggio da WNS, è necessario richiederlo impostando l'intestazione X-WNS-RequestForStatus nel POST HTTP della notifica.
Il servizio cloud dell'app può usare le informazioni contenute in questi messaggi di stato per interrompere i tentativi di comunicazione tramite notifiche non elaborate. Il servizio può riprendere l'invio di notifiche non elaborate una volta contattato dall'app, quando l'app torna in primo piano.
Osserva che non è consigliabile basarsi su X-WNS-NotificationStatus per determinare se la notifica è stata recapitata correttamente al client.
Per maggiori informazioni, vedi Intestazioni di richiesta e risposta del servizio di notifica push
Attività in background attivate da notifiche non elaborate
Importante
Prima di usare le attività in background delle notifiche non elaborate, è necessario concedere a un'app l'accesso in background tramite BackgroundExecutionManager.RequestAccessAsync.
L'attività in background deve essere registrata con un PushNotificationTrigger. Se non è registrato, l'attività non verrà eseguita quando viene ricevuta una notifica non elaborata.
Un'attività in background attivata da una notifica non elaborata consente al servizio cloud dell'app di contattare l'app, anche quando l'app non è in esecuzione (anche se potrebbe attivarla per l'esecuzione). Questo problema si verifica senza che l'app abbia la necessità di mantenere una connessione continua. Le notifiche non elaborate sono l'unico tipo di notifica che può attivare le attività in background. Tuttavia, mentre le notifiche push di tipo avviso popup, riquadro e notifica non possono attivare attività in background, le attività in background attivate dalle notifiche non elaborate possono aggiornare i riquadri e richiamare notifiche di tipo avviso popup tramite chiamate API locali.
Come illustrazione del funzionamento delle attività in background attivate dalle notifiche non elaborate, si consideri un'app usata per leggere gli e-book. Prima di tutto, un utente acquista un libro online, possibilmente su un altro dispositivo. In risposta, il servizio cloud dell'app può inviare una notifica non elaborata a ognuno dei dispositivi dell'utente, con un payload che indica che il libro è stato acquistato e l'app deve scaricarla. L'app contatta quindi direttamente il servizio cloud dell'app per avviare un download in background del nuovo libro in modo che in un secondo momento, quando l'utente avvia l'app, il libro è già presente e pronto per la lettura.
Per usare una notifica non elaborata per attivare un'attività in background, l'app deve:
- richiedere l'autorizzazione per eseguire attività in background (che l'utente può revocare in qualsiasi momento) usando BackgroundExecutionManager.RequestAccessAsync.
- Implementazione dell'attività in background. Per maggiori informazioni, vedere Supportare l'app con attività in background.
L'attività in background viene quindi richiamata in risposta a PushNotificationTrigger, ogni volta che viene ricevuta una notifica non elaborata per l'app. L'attività in background interpreta il payload specifico dell'app della notifica non elaborata e agisce su di esso.
Per ogni app, puoi eseguire una sola attività in background alla volta. Se viene attivata un'attività in background per un'app per la quale è già in esecuzione un'attività in background, è necessario completare la prima attività in background prima dell'esecuzione del nuovo.
Altre risorse
Per altre informazioni, scaricare l'esempio di notifiche non elaborate per Windows 8.1 e l'esempio di notifiche push e periodiche per Windows 8.1 e usare nuovamente il codice sorgente nell'app di Windows 10.
Argomenti correlati
- Linee guida per le notifiche non elaborate
- Guida introduttiva: Creazione e registrazione di un'attività in background di notifica non elaborata
- Guida introduttiva: Intercettazione delle notifiche push per l'esecuzione di app
- RawNotification
- BackgroundExecutionManager.RequestAccessAsync