Compartir a través de


Notificaciones de iconos rastreables

Nota:

Los iconos dinámicos son una característica de Windows 10 que no se admite en versiones posteriores de Windows. En el caso de las nuevas aplicaciones, se recomienda seguir las instrucciones actuales para los iconos de la aplicación.

Las notificaciones de iconos rastreables le permiten determinar qué notificaciones de iconos estaba mostrando el Icono dinámico de su aplicación cuando el usuario hizo clic en el icono. Por ejemplo, una aplicación de noticias podría usar esta característica para determinar qué historia de noticias se mostraba su icono dinámico cuando el usuario lo inició; podría asegurarse de que la historia se muestra de forma destacada para que el usuario pueda encontrarlo.

Importante

Requiere actualización de aniversario: para usar las notificaciones de icono rastreables con aplicaciones para UWP basadas en C#, C++o VB, debe tener como destino el SDK 14393 y ejecutar la compilación 14393 o posterior.

API importantes: Propiedad LaunchActivatedEventArgs.TileActivatedInfo, clase TileActivatedInfo

Funcionamiento

Para habilitar las notificaciones de icono rastreables, use la propiedad Arguments en la carga de notificación del icono, similar a la propiedad launch en la carga de notificación del sistema, para insertar información sobre el contenido de la notificación del icono.

Cuando la aplicación se inicia a través del icono dinámico, el sistema devuelve una lista de argumentos de las notificaciones de icono que se muestran recientemente o actuales.

Cuándo usar las notificaciones de iconos rastreables

Las notificaciones de icono rastreables se suelen usar cuando se usa la cola de notificaciones en el icono dinámico (lo que significa que va a recorrer hasta 5 notificaciones diferentes). También son beneficiosos cuando el contenido del icono dinámico no está sincronizado con el contenido más reciente de la aplicación. Por ejemplo, la aplicación Noticias actualiza su icono dinámico cada 30 minutos, pero cuando se inicia la aplicación, carga las noticias más recientes (que pueden no incluir algo que estaba en el icono desde el último intervalo de sondeo). Cuando esto sucede, es posible que el usuario se sienta frustrado por no poder encontrar la historia que vio en su icono dinámico. Aquí es donde las notificaciones de icono rastreables pueden ayudar, ya que le permiten asegurarse de que lo que vio el usuario en su icono es fácil de detectar.

Qué hacer con las notificaciones de icono rastreables

Lo más importante que hay que tener en cuenta es que, en la mayoría de los escenarios, NO debe navegar directamente a la notificación específica que estaba en el icono cuando el usuario hizo clic en él. El icono dinámico se usa como punto de entrada para la aplicación. Puede haber dos escenarios cuando un usuario hace clic en el icono dinámico: (1) que quería iniciar la aplicación normalmente, o (2) quería ver más información sobre una notificación específica que estaba en el icono dinámico. Dado que no hay ninguna manera de que el usuario diga explícitamente qué comportamiento quiere, la experiencia ideal es iniciar la aplicación con normalidad, a la vez que se asegura de que la notificación que vio el usuario es fácilmente reconocible.

Por ejemplo, al hacer clic en el icono dinámico de la aplicación MSN News, se inicia la aplicación normalmente: muestra la página principal o cualquier artículo que el usuario leyó anteriormente. Sin embargo, en la página principal, la aplicación garantiza que la historia del icono dinámico se pueda detectar fácilmente. De este modo, se admiten ambos escenarios: el escenario en el que simplemente desea iniciar o reanudar la aplicación y el escenario en el que desea ver el artículo específico.

Inclusión de la propiedad Arguments en la carga de notificación del icono

En una carga de notificación, la propiedad arguments permite a la aplicación proporcionar datos que puede usar para identificar posteriormente la notificación. Por ejemplo, los argumentos pueden incluir el identificador del artículo, de modo que cuando se inicie, puede recuperar y mostrar la historia. La propiedad acepta una cadena, que puede serializarse como se desee (cadena de consulta, JSON, etc.), pero normalmente recomendamos el formato de cadena de consulta, ya que es ligero y codifica bien en XML.

La propiedad se puede establecer en los elementos TileVisual y TileBinding, y se reduce en cascada. Si desea los mismos argumentos en cada tamaño de icono, simplemente establezca los argumentos en TileVisual. Si necesita argumentos específicos para tamaños de icono específicos, puede establecer los argumentos en elementos TileBinding individuales.

En este ejemplo se crea una carga de notificación que usa la propiedad arguments para que la notificación se pueda identificar más adelante.

// 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 */ }
        }
    }
};

Comprobación de la propiedad arguments cuando se inicia la aplicación

La mayoría de las aplicaciones tienen un archivo App.xaml.cs que contiene una invalidación para el método OnLaunched. Como su nombre sugiere, la aplicación llama a este método cuando se inicia. Toma un único argumento, un objeto LaunchActivatedEventArgs.

El objeto LaunchActivatedEventArgs tiene una propiedad que permite las notificaciones que se pueden rastrear: la propiedad TileActivatedInfo, que proporciona acceso a un objeto TileActivatedInfo. Cuando el usuario inicia la aplicación desde su icono (en lugar de la lista de aplicaciones, la búsqueda o cualquier otro punto de entrada), la aplicación inicializa esta propiedad.

El objeto TileActivatedInfo contiene una propiedad denominada RecentlyShownNotifications, que contiene una lista de notificaciones que se han mostrado en el icono en los últimos 15 minutos. El primer elemento de la lista representa la notificación actualmente en el icono y los elementos siguientes representan las notificaciones que vio el usuario antes del actual. Si el icono se ha borrado, esta lista está vacía.

Cada objeto ShownTileNotification tiene una propiedad Arguments. La propiedad Arguments se inicializará con la cadena de argumentos de la carga de notificación del icono, o null si la carga no incluyó la cadena de argumentos.

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
}

Acceso a OnLaunched desde aplicaciones de escritorio

¡Las aplicaciones de escritorio (como WPF, etc.) que usan el Puente de dispositivo de escritorio, también pueden usar iconos rastreables. La única diferencia es acceder a los argumentos OnLaunched. Tenga en cuenta que primero debe empaquetar la aplicación con el Puente de dispositivo de escritorio.

Importante

Requiere la actualización de octubre de 2018: Para usar la API AppInstance.GetActivatedEventArgs(), debe tener como objetivo el SDK 17763 y estar ejecutando la compilación 17763 o posterior.

Para las aplicaciones de escritorio, para acceder a los argumentos launch, haga lo siguiente...


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;

Ejemplo XML sin formato

Si usa XML sin formato en lugar de la biblioteca de notificaciones, este es el 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>