Utilizar notificações de um aplicativo com um aplicativo de console

Uma notificação de aplicativo é um pop-up de interface do usuário que aparece fora da janela do aplicativo, fornecendo informações ou ações oportunas ao usuário. As notificações podem ser puramente informativas, podem iniciar seu aplicativo quando clicadas ou podem disparar uma ação em segundo plano sem colocar seu aplicativo em primeiro plano.

Captura de tela de uma notificação do aplicativo

Este artigo orienta você pelas etapas para criar e enviar uma notificação de aplicativo a partir de um aplicativo .NET de console e, em seguida, lidar com a ativação quando o usuário interagir com ela. Este artigo usa as APIs SDK do Aplicativo WindowsMicrosoft.Windows.AppNotifications.

Para obter uma visão geral das notificações do aplicativo e das diretrizes para outras estruturas, consulte a visão geral das notificações do aplicativo.

Este artigo aborda as notificações locais. Para obter informações sobre como fornecer notificações de um serviço de nuvem, consulte as notificações por push.

Importante

No momento, não há suporte para notificações para aplicativos com privilégios elevados (administrador).

Pré-requisitos

  • Um aplicativo de console .NET que tem como alvo o .NET 6 ou posterior
  • O pacote NuGet SDK do Aplicativo Windows (Microsoft.WindowsAppSDK)

Configure seu projeto

No arquivo de projeto (.csproj), verifique se o TargetFramework inclui uma estrutura de destino Windows:

<TargetFramework>net9.0-windows10.0.19041.0</TargetFramework>

Adicione o pacote NuGet SDK do Aplicativo Windows:

<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.7.250310001" />

Para aplicativos não empacotados, adicione:

<WindowsPackageType>None</WindowsPackageType>

Registrar-se para notificações de aplicativo

Em seu Main método, registre o manipulador NotificationInvokedantes de chamar o Registro. O aplicativo de console deve permanecer em execução para receber callbacks de ativação quando as notificações forem clicadas.

Program.cs

using Microsoft.Windows.AppNotifications;
using Microsoft.Windows.AppNotifications.Builder;

// Register the notification handler before calling Register
AppNotificationManager.Default.NotificationInvoked += (sender, args) =>
{
    // Handle notification activation.
    // args.Argument contains the arguments from the notification
    // or button that was clicked, as key=value pairs separated
    // by '&', for example "action=acknowledge".
    Console.WriteLine($"Notification activated! Arguments: {args.Argument}");
};

AppNotificationManager.Default.Register();

Observação

Para aplicativos não empacotados, Register() configura automaticamente o registro do servidor COM que permite que Windows inicie seu aplicativo quando uma notificação é clicada. Você não precisa configurar a ativação COM ou um AUMID manualmente.

Enviar uma notificação do aplicativo

Use AppNotificationBuilder para construir o conteúdo da notificação e AppNotificationManager.Show para enviar uma notificação.

var notification = new AppNotificationBuilder()
    .AddArgument("action", "viewItem")
    .AddText("Console Notification")
    .AddText("This was sent from a console app using Windows App SDK.")
    .AddButton(new AppNotificationButton("Acknowledge")
        .AddArgument("action", "acknowledge"))
    .BuildNotification();

AppNotificationManager.Default.Show(notification);

Manter o aplicativo em execução

Para que o NotificationInvoked manipulador seja chamado, o aplicativo de console ainda deve estar em execução quando o usuário clicar na notificação. Se o aplicativo sair antes que o usuário interaja com a notificação, o próximo clique iniciará um novo processo.

Console.WriteLine("Notification sent! Waiting for activation...");
Console.WriteLine("Press Enter to exit.");
Console.ReadLine();

// Unregister when the app exits
AppNotificationManager.Default.Unregister();

Exemplo completo

Aqui está um exemplo completo Program.cs que envia uma notificação e lida com a ativação:

using Microsoft.Windows.AppNotifications;
using Microsoft.Windows.AppNotifications.Builder;

Console.WriteLine("Console App Notification Test");

// Step 1: Register for notification activation
AppNotificationManager.Default.NotificationInvoked += (sender, args) =>
{
    Console.WriteLine($"Notification activated! Arguments: {args.Argument}");
};

AppNotificationManager.Default.Register();

// Step 2: Send a notification
var notification = new AppNotificationBuilder()
    .AddArgument("action", "viewItem")
    .AddText("Console Notification")
    .AddText("This was sent from a console app using Windows App SDK.")
    .AddButton(new AppNotificationButton("Acknowledge")
        .AddArgument("action", "acknowledge"))
    .BuildNotification();

AppNotificationManager.Default.Show(notification);

// Step 3: Wait for user interaction
Console.WriteLine("Notification sent! Click it to test activation.");
Console.WriteLine("Press Enter to exit.");
Console.ReadLine();

AppNotificationManager.Default.Unregister();