Notifiche di tipo riquadro individuabili

Le notifiche dei riquadri animati ti permettono di determinare quali notifiche dei riquadri della tua app stavano visualizzando quando l'utente ha cliccato sul riquadro.
Ad esempio, un'applicazione di notizie potrebbe utilizzare questa funzione per determinare quale notizia stava visualizzando il suo riquadro animato quando l'utente l'ha lanciato; potrebbe quindi assicurarsi che la notizia sia visualizzata in modo evidente in modo che l'utente possa trovarla.

Importante

Richiede l'aggiornamento dell'anniversario: per usare le notifiche di riquadri individuabili con app UWP basate su C#, C++o VB, devi usare l'SDK 14393 ed eseguire la build 14393 o successiva. Per le app UWP basate su JavaScript, devi avere come destinazione l'SDK 17134 ed eseguire la build 17134 o successiva.

API importanti: proprietà LaunchActivatedEventArgs.TileActivatedInfo, classe TileActivatedInfo

Funzionamento

Per abilitare le notifiche dei riquadri individuabili, usa la proprietà Arguments nel payload della notifica riquadro, analogamente alla proprietà di avvio nel payload della notifica di tipo avviso popup, per incorporare informazioni sul contenuto nella notifica del riquadro.

Quando l'app viene avviata tramite il riquadro animato, il sistema restituisce un elenco di argomenti dalle notifiche dei riquadri correnti o visualizzate di recente.

Quando usare le notifiche di riquadro individuabili

Le notifiche dei riquadri individuabili vengono in genere usate quando si usa la coda di notifica nel riquadro animato ( ovvero si sta eseguendo il ciclo fino a 5 notifiche diverse). Sono di utilità anche quando il contenuto nel riquadro animato non è sincronizzato con il contenuto più recente nell'app. Ad esempio, l'app Notizie aggiorna il riquadro animato ogni 30 minuti, ma quando l'app viene avviata, carica le ultime notizie (che potrebbero non includere qualcosa che si trovava nel riquadro dall'ultimo intervallo di polling). In questo caso, l'utente potrebbe non essere in grado di trovare la storia che ha visto nel riquadro animato. In questo modo le notifiche di riquadri individuabili possono essere utili, consentendo di assicurarsi che l'utente abbia visto nel riquadro sia facilmente individuabile.

Cosa fare con le notifiche di un riquadro individuabile

L'aspetto più importante da notare è che nella maggior parte degli scenari non è consigliabile passare direttamente alla notifica specifica che si trovava nel riquadro quando l'utente lo ha fatto clic. Il riquadro animato viene usato come punto di ingresso per l'applicazione. Possono esserci due scenari quando un utente fa clic sul riquadro animato: (1) vuole avviare l'app normalmente o (2) vuole visualizzare altre informazioni su una notifica specifica presente nel riquadro animato. Poiché non è possibile consentire all'utente di pronunciare in modo esplicito il comportamento desiderato, l'esperienza ideale consiste nell'avviare l'app normalmente, assicurandosi che la notifica visualizzata dall'utente sia facilmente individuabile.

Ad esempio, facendo clic sul riquadro live dell'app MSN News viene avviata normalmente l'app: visualizza la home page o qualsiasi articolo che l'utente ha letto in precedenza. Tuttavia, nella home page, l'app garantisce che la storia del riquadro animato sia facilmente individuabile. In questo modo, sono supportati entrambi gli scenari: lo scenario in cui si vuole semplicemente avviare o riprendere l'app e lo scenario in cui si vuole visualizzare la storia specifica.

Come includere la proprietà Arguments nel payload di notifica del riquadro

In un payload di notifica, la proprietà arguments consente all'app di fornire i dati che è possibile usare per identificare in un secondo momento la notifica. Ad esempio, gli argomenti potrebbero includere l'ID della storia, in modo che, al momento dell'avvio, sia possibile recuperare e visualizzare la storia. La proprietà accetta una stringa, che può essere serializzata, tuttavia si preferisce (stringa di query, JSON e così via), ma in genere si consiglia il formato della stringa di query, perché è semplice e codifica XML.

La proprietà può essere impostata sia sugli elementi TileVisual che tileBinding e verrà propagata verso il basso. Se si desidera che gli stessi argomenti in ogni dimensione del riquadro, è sufficiente impostare gli argomenti in TileVisual. Se sono necessari argomenti specifici per dimensioni specifiche dei riquadri, è possibile impostare gli argomenti nei singoli elementi TileBinding .

In questo esempio viene creato un payload di notifica che usa la proprietà arguments in modo che la notifica possa essere identificata in un secondo momento.

// Uses the following NuGet packages
// - Microsoft.Toolkit.Uwp.Notifications
// - QueryString.NET
 
TileContent content = new TileContent()
{
    Visual = new TileVisual()
    {
        // These arguments cascade down to Medium and Wide
        Arguments = new QueryString()
        {
            { "action", "storyClicked" },
            { "story", "201c9b1" }
        }.ToString(),
 
 
        // Medium tile
        TileMedium = new TileBinding()
        {
            Content = new TileBindingContentAdaptive()
            {
                // Omitted
            }
        },
 
 
        // Wide tile is same as Medium
        TileWide = new TileBinding() { /* Omitted */ },
 
 
        // Large tile is an aggregate of multiple stories
        // and therefore needs different arguments
        TileLarge = new TileBinding()
        {
            Arguments = new QueryString()
            {
                { "action", "storiesClicked" },
                { "story", "43f939ag" },
                { "story", "201c9b1" },
                { "story", "d9481ca" }
            }.ToString(),
 
            Content = new TileBindingContentAdaptive() { /* Omitted */ }
        }
    }
};

Come verificare la proprietà arguments all'avvio dell'app

La maggior parte delle app ha un file App.xaml.cs che contiene un override per il metodo OnLaunched . Come suggerisce il nome, l'app chiama questo metodo all'avvio. Accetta un singolo argomento, un oggetto LaunchActivatedEventArgs .

L'oggetto LaunchActivatedEventArgs ha una proprietà che abilita le notifiche individuabili: la proprietà TileActivatedInfo, che fornisce l'accesso a un oggetto TileActivatedInfo. Quando l'utente avvia l'app dal riquadro, anziché dall'elenco di app, dalla ricerca o da qualsiasi altro punto di ingresso, l'app inizializza questa proprietà.

L'oggetto TileActivatedInfo contiene una proprietà denominata RecentlyShownNotifications, che contiene un elenco di notifiche visualizzate nel riquadro negli ultimi 15 minuti. Il primo elemento nell'elenco rappresenta la notifica attualmente presente nel riquadro e gli elementi successivi rappresentano le notifiche che l'utente ha visto prima di quello corrente. Se il riquadro è stato cancellato, questo elenco è vuoto.

Ogni oggetto ShownTileNotification ha una proprietà Arguments. La proprietà Arguments verrà inizializzata con la stringa degli argomenti del payload di notifica del riquadro oppure null se il payload non include la stringa degli argomenti.

protected override void OnLaunched(LaunchActivatedEventArgs args)
{
    // If the API is present (doesn't exist on 10240 and 10586)
    if (ApiInformation.IsPropertyPresent(typeof(LaunchActivatedEventArgs).FullName, nameof(LaunchActivatedEventArgs.TileActivatedInfo)))
    {
        // If clicked on from tile
        if (args.TileActivatedInfo != null)
        {
            // If tile notification(s) were present
            if (args.TileActivatedInfo.RecentlyShownNotifications.Count > 0)
            {
                // Get arguments from the notifications that were recently displayed
                string[] allArgs = args.TileActivatedInfo.RecentlyShownNotifications
                .Select(i => i.Arguments)
                .ToArray();
 
                // TODO: Highlight each story in the app
            }
        }
    }
 
    // TODO: Initialize app
}

Accesso a OnLaunched dalle applicazioni desktop

Anche le app desktop (ad esempio WPF e così via) che usano Desktop Bridge possono usare riquadri individuabili. L'unica differenza consiste nell'accedere agli argomenti OnLaunched. Tieni presente che devi prima creare un pacchetto dell'app con Desktop Bridge.

Importante

Richiede l'aggiornamento di ottobre 2018: per usare l'API, è necessario avere come destinazione l'SDK AppInstance.GetActivatedEventArgs() 17763 ed eseguire la build 17763 o successiva.

Per le applicazioni desktop, per accedere agli argomenti di avvio, eseguire le operazioni seguenti:


static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    // API only available on build 17763 or later
    var args = AppInstance.GetActivatedEventArgs();
    switch (args.Kind)
    {
        case ActivationKind.Launch:

            var launchArgs = args as LaunchActivatedEventArgs;

            // If clicked on from tile
            if (launchArgs.TileActivatedInfo != null)
            {
                // If tile notification(s) were present
                if (launchArgs.TileActivatedInfo.RecentlyShownNotifications.Count > 0)
                {
                    // Get arguments from the notifications that were recently displayed
                    string[] allTileArgs = launchArgs.TileActivatedInfo.RecentlyShownNotifications
                    .Select(i => i.Arguments)
                    .ToArray();
     
                    // TODO: Highlight each story in the app
                }
            }
    
            break;

Esempio xml non elaborato

Se si usa codice XML non elaborato anziché la libreria notifiche, ecco il codice XML.

<tile>
  <visual arguments="action=storyClicked&amp;story=201c9b1">
 
    <binding template="TileMedium">
       
      <text>Kitten learns how to drive a car...</text>
      ... (omitted)
     
    </binding>
 
    <binding template="TileWide">
      ... (same as Medium)
    </binding>
     
    <!--Large tile is an aggregate of multiple stories-->
    <binding
      template="TileLarge"
      arguments="action=storiesClicked&amp;story=43f939ag&amp;story=201c9b1&amp;story=d9481ca">
   
      <text>Can your dog understand what you're saying?</text>
      ... (another story)
      ... (one more story)
   
    </binding>
 
  </visual>
</tile>