Las notificaciones del sistema son uno de los mecanismos más eficaces para comunicar información al usuario sin interrumpir su flujo de trabajo. En Windows, estas notificaciones pueden ser enriquecidas mediante el sistema de notificaciones nativas, que incluye soporte para contenido visual dinámico con Adaptive Cards y la posibilidad de recibir notificaciones push incluso cuando la aplicación no está en ejecución.
Con WinUI 3 y Windows App SDK, es posible crear y gestionar notificaciones enriquecidas, personalizadas y reactivas. Este artículo muestra cómo implementar notificaciones toast locales, cómo personalizarlas con Adaptive Cards, y cómo configurar notificaciones push para mantener al usuario informado en tiempo real.
Requisitos
- Windows 11
- Visual Studio 2022+
- Proyecto empaquetado con MSIX (WinUI 3)
- Windows App SDK 1.3 o superior
- Referencia a
Microsoft.WindowsAppSDK
yMicrosoft.Toolkit.Uwp.Notifications
Paso 1: Instalar el paquete NuGet para notificaciones
Agregar al proyecto el paquete:
Install-Package Microsoft.Windows.SDK.Contracts
Install-Package Microsoft.Toolkit.Uwp.Notifications
Esto habilita la construcción de notificaciones toast con contenido enriquecido.
Paso 2: Enviar una notificación toast simple
Agregar esta llamada en un evento de botón o al iniciar la app:
new ToastContentBuilder()
.AddText("Recordatorio")
.AddText("No olvides guardar tus cambios")
.Show();
Esto mostrará una notificación estándar en el Centro de Actividades.
Paso 3: Notificación enriquecida con Adaptive Card
Construir una tarjeta adaptativa (JSON):
string adaptiveJson = @"
{
""type"": ""AdaptiveCard"",
""version"": ""1.5"",
""body"": [
{
""type"": ""TextBlock"",
""text"": ""Actualización disponible"",
""weight"": ""Bolder"",
""size"": ""Medium""
},
{
""type"": ""TextBlock"",
""text"": ""La versión 1.5 ya está lista para instalar."",
""wrap"": true
}
],
""actions"": [
{
""type"": ""Action.OpenUrl"",
""title"": ""Actualizar"",
""url"": ""https://miapp.com/update""
}
]
}";
var toastContent = new ToastContent()
{
Visual = new ToastVisual()
{
BindingGeneric = new ToastBindingGeneric()
{
Children =
{
new AdaptiveCardJsonContent(adaptiveJson)
}
}
}
};
ToastNotificationManagerCompat.CreateToastNotifier().Show(new ToastNotification(toastContent.GetXml()));
Este código muestra una notificación visualmente rica y con botón de acción.
Paso 4: Manejar la activación de la notificación
Al pulsar sobre la notificación, se puede invocar código personalizado.
Registrar manejador en App.xaml.cs
:
ToastNotificationManagerCompat.OnActivated += toastArgs =>
{
ToastArguments args = toastArgs.Argument;
// Lógica según argumentos
if (args.Contains("abrirPanel"))
{
DispatcherQueue.TryEnqueue(() =>
{
new PanelWindow().Activate();
});
}
};
Para enviar argumentos desde la notificación:
.AddArgument("abrirPanel", "true")
Paso 5: Notificaciones push (via canal WNS)
Crear canal
var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
Debug.WriteLine("URI canal: " + channel.Uri);
Este URI se registra en el servidor para enviar push desde un backend.
Recibir notificaciones push
channel.PushNotificationReceived += (s, e) =>
{
// Mostrar notificación o actualizar UI
var mensaje = e.RawNotification.Content;
};
Esto permite recibir actualizaciones incluso si la app está suspendida (con restricciones).
Paso 6: Permisos y manifiesto
Asegurarse de declarar lo siguiente en el Package.appxmanifest
:
<Extensions>
<uap:Extension Category="windows.toastNotificationActivation">
<uap:ToastNotificationActivation ToastActivatorCLSID="YOUR-CLSID-HERE" />
</uap:Extension>
</Extensions>
Y registrar el activador COM. Esto requiere el uso de un componente activador como AppNotificationActivator
.
Paso 7: Ejemplo completo con interacción
new ToastContentBuilder()
.AddArgument("action", "abrirPanel")
.AddText("Nuevo mensaje recibido")
.AddText("Haz clic para abrir el panel de control")
.AddButton(new ToastButton()
.SetContent("Abrir ahora")
.AddArgument("action", "abrirPanel"))
.Show();
Y en el manejador:
if (args["action"] == "abrirPanel")
{
DispatcherQueue.TryEnqueue(() =>
{
new PanelWindow().Activate();
});
}
Buenas prácticas
- No abusar de las notificaciones para evitar fatiga del usuario
- Personalizar con íconos, logos e identidad visual
- Combinar con lógica de actividad para mostrar solo cuando el usuario está inactivo
- Permitir al usuario desactivar ciertos tipos de notificaciones
- Usar telemetría para medir tasa de clics y efectividad
Casos de uso
- Alertas de sistema o monitoreo en segundo plano
- Confirmaciones de procesos terminados
- Acciones rápidas desde el Centro de Actividades
- Integración con procesos push desde un backend o IoT
- UX reactiva sin abrir la ventana principal
Conclusión
La API de notificaciones nativas de Windows, junto con las Adaptive Cards y el soporte push, brinda una poderosa plataforma para interactuar con el usuario de manera contextual y no intrusiva. Usando WinUI 3 y Windows App SDK, es posible ofrecer notificaciones enriquecidas, dinámicas y conectadas, reforzando el ciclo de comunicación entre la aplicación y el usuario.
La integración adecuada de notificaciones no solo mejora la experiencia de usuario, sino que también posiciona a la aplicación como una parte activa del ecosistema Windows moderno.
Ver también
- Construcción de un asistente contextual para escritorio usando IA local con acceso al sistema
- Integración de inferencia local ONNX con Windows ML en apps modernas
- Integración con servicios locales vía App Services y extensión de funcionalidades entre apps
- Implementación de Background Tasks persistentes en apps modernas
- Empaquetado de apps modernas con MSIX y configuración avanzada del manifiesto