Compartir a través de


Enviar una notificación de icono local

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.

Los iconos de la aplicación principal de Windows 10 se definen en el manifiesto de la aplicación, mientras que los iconos secundarios se crean y definen mediante programación mediante el código de la aplicación. En este artículo se describe cómo enviar una notificación de icono local a un icono principal y un icono secundario mediante plantillas de icono adaptables. (Una notificación local es una que se envía desde el código de la aplicación en lugar de una que se inserta o extrae de un servidor web).

icono y icono predeterminados con notificación

Nota:

Obtenga información sobre cómo crear iconos adaptables y esquema de contenido de iconos.

Instalación del paquete NuGet.

Se recomienda instalar el paquete NuGet de la biblioteca de notificaciones, lo que simplifica la generación de cargas de icono con objetos en lugar de XML sin formato.

Los ejemplos de código insertados de este artículo son para C# mediante la biblioteca de notificaciones. (Si prefiere crear su propio XML, puede encontrar ejemplos de código sin la biblioteca de notificaciones hacia el final del artículo).

Incorporación de declaraciones de espacio de nombres

Para acceder a las API de icono, incluya el espacio de nombres Windows.UI.Notifications. También se recomienda incluir el espacio de nombres Microsoft.Toolkit.Uwp.Notifications para que pueda aprovechar nuestras API auxiliares de iconos (debe instalar el paquete NuGet de la biblioteca de notificaciones para acceder a estas API).

using Windows.UI.Notifications;
using Microsoft.Toolkit.Uwp.Notifications; // Notifications library

Creación del contenido de la notificación

En Windows 10, las cargas de icono se definen mediante plantillas de icono adaptables, que permiten crear diseños visuales personalizados para las notificaciones. (Para obtener información sobre lo que es posible con iconos adaptables, consulte Crear iconos adaptables).

En este ejemplo de código se crea contenido de mosaico adaptable para iconos medianos y anchos.

// In a real app, these would be initialized with actual data
string from = "Jennifer Parker";
string subject = "Photos from our trip";
string body = "Check out these awesome photos I took while in New Zealand!";

// Construct the tile content
TileContent content = new TileContent()
{
    Visual = new TileVisual()
    {
        TileMedium = new TileBinding()
        {
            Content = new TileBindingContentAdaptive()
            {
                Children =
                {
                    new AdaptiveText()
                    {
                        Text = from
                    },

                    new AdaptiveText()
                    {
                        Text = subject,
                        HintStyle = AdaptiveTextStyle.CaptionSubtle
                    },

                    new AdaptiveText()
                    {
                        Text = body,
                        HintStyle = AdaptiveTextStyle.CaptionSubtle
                    }
                }
            }
        },

        TileWide = new TileBinding()
        {
            Content = new TileBindingContentAdaptive()
            {
                Children =
                {
                    new AdaptiveText()
                    {
                        Text = from,
                        HintStyle = AdaptiveTextStyle.Subtitle
                    },

                    new AdaptiveText()
                    {
                        Text = subject,
                        HintStyle = AdaptiveTextStyle.CaptionSubtle
                    },

                    new AdaptiveText()
                    {
                        Text = body,
                        HintStyle = AdaptiveTextStyle.CaptionSubtle
                    }
                }
            }
        }
    }
};

El contenido de la notificación es similar al siguiente cuando se muestra en un icono medio:

contenido de notificación en un icono medio

Creación de la notificación

Una vez que tenga el contenido de la notificación, deberá crear un nuevo TileNotification. El constructor TileNotification toma un objeto XmlDocument de Windows Runtime, que puedes obtener del método TileContent.GetXml si usas la biblioteca de notificaciones.

En este ejemplo de código se crea una notificación para un icono nuevo.

// Create the tile notification
var notification = new TileNotification(content.GetXml());

Establecer una hora de expiración para la notificación (opcional)

De forma predeterminada, las notificaciones de icono y distintivo locales no expiran, mientras que las notificaciones push, periódicas y programadas expiran después de tres días. Dado que el contenido del icono no debe conservar más tiempo de lo necesario, se recomienda establecer una hora de expiración que tenga sentido para la aplicación, especialmente en las notificaciones de icono y distintivo locales.

En este ejemplo de código se crea una notificación que expira y se quitará del icono después de diez minutos.

tileNotification.ExpirationTime = DateTimeOffset.UtcNow.AddMinutes(10);

Enviar la notificación

Aunque el envío local de una notificación de icono es sencillo, el envío de la notificación a un icono principal o secundario es un poco diferente.

Icono principal

Para enviar una notificación a un icono principal, use TileUpdateManager para crear un actualizador de iconos para el icono principal y envíe la notificación llamando a "Update". Independientemente de si está visible, el icono principal de la aplicación siempre existe, por lo que puede enviar notificaciones a ella incluso cuando no está anclado. Si el usuario ancla el icono principal más adelante, aparecerán las notificaciones que envió.

Este ejemplo de código envía una notificación a un icono principal.

// Send the notification to the primary tile
TileUpdateManager.CreateTileUpdaterForApplication().Update(notification);

Icono secundario

Para enviar una notificación a un icono secundario, primero asegúrese de que el icono secundario existe. Si intenta crear un actualizador de iconos para un icono secundario que no existe (por ejemplo, si el usuario desancló el icono secundario), se producirá una excepción. Puede usar SecondaryTile.Exists(tileId) para detectar si el icono secundario está anclado y, a continuación, crear un actualizador de iconos para el icono secundario y enviar la notificación.

Este ejemplo de código envía una notificación a un icono secundario.

// If the secondary tile is pinned
if (SecondaryTile.Exists("MySecondaryTile"))
{
    // Get its updater
    var updater = TileUpdateManager.CreateTileUpdaterForSecondaryTile("MySecondaryTile");

    // And send the notification
    updater.Update(notification);
}

icono y icono predeterminados con notificación

Borrar notificaciones en el icono (opcional)

En la mayoría de los casos, debe borrar una notificación una vez que el usuario haya interactuado con ese contenido. Por ejemplo, cuando el usuario inicia la aplicación, es posible que quiera borrar todas las notificaciones del icono. Si las notificaciones están limitadas a tiempo, se recomienda establecer una hora de expiración en la notificación en lugar de borrar explícitamente la notificación.

En este ejemplo de código se borra la notificación de icono del icono principal. Puede hacer lo mismo para los iconos secundarios mediante la creación de un actualizador de iconos para el icono secundario.

TileUpdateManager.CreateTileUpdaterForApplication().Clear();

Para un icono con la cola de notificaciones habilitada y las notificaciones en la cola, llamar al método Clear vacía la cola. Sin embargo, no puede borrar una notificación a través del servidor de la aplicación; solo el código de la aplicación local puede borrar las notificaciones.

Las notificaciones push o periódicas solo pueden agregar notificaciones nuevas o reemplazar las notificaciones existentes. Una llamada local al método Clear borrará el icono independientemente de si las propias notificaciones se han agregado a través de notificaciones push, periódicas o locales. Este método no borra las notificaciones programadas que aún no han aparecido.

icono con notificación y icono después de borrarse

Pasos siguientes

Uso de la cola de notificaciones

Ahora que ha realizado la primera actualización del icono, puede expandir la funcionalidad del icono habilitando una cola de notificaciones.

Otros métodos de entrega de notificaciones

En este artículo se muestra cómo enviar la actualización del icono como notificación. Para explorar otros métodos de entrega de notificaciones, incluidos los programados, periódicos y de inserción, consulte Entrega de notificaciones.

Método de entrega XmlEncode

Si no usa la biblioteca de notificaciones, este método de entrega de notificaciones es otra alternativa.

public string XmlEncode(string text)
{
    StringBuilder builder = new StringBuilder();
    using (var writer = XmlWriter.Create(builder))
    {
        writer.WriteString(text);
    }

    return builder.ToString();
}

Ejemplos de código sin biblioteca de notificaciones

Si prefiere trabajar con XML sin formato en lugar del paquete NuGet de la biblioteca de notificaciones, use estos ejemplos de código alternativos para los tres primeros ejemplos proporcionados en este artículo. El resto de los ejemplos de código se pueden usar con la biblioteca de notificaciones o con XML sin formato.

Incorporación de declaraciones de espacio de nombres

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

Creación del contenido de la notificación

// In a real app, these would be initialized with actual data
string from = "Jennifer Parker";
string subject = "Photos from our trip";
string body = "Check out these awesome photos I took while in New Zealand!";

// TODO - all values need to be XML escaped

// Construct the tile content as a string
string content = $@"
<tile>
    <visual>

        <binding template='TileMedium'>
            <text>{from}</text>
            <text hint-style='captionSubtle'>{subject}</text>
            <text hint-style='captionSubtle'>{body}</text>
        </binding>

        <binding template='TileWide'>
            <text hint-style='subtitle'>{from}</text>
            <text hint-style='captionSubtle'>{subject}</text>
            <text hint-style='captionSubtle'>{body}</text>
        </binding>

    </visual>
</tile>";

Creación de la notificación

// Load the string into an XmlDocument
XmlDocument doc = new XmlDocument();
doc.LoadXml(content);

// Then create the tile notification
var notification = new TileNotification(doc);