Utilizar notificações de app com uma aplicação de consola

Uma notificação de aplicação é um pop-up na interface que aparece fora da janela da sua aplicação, fornecendo informações ou ações oportunas ao utilizador. As notificações podem ser puramente informativas, podem abrir a sua aplicação ao clicar, ou podem desencadear uma ação em segundo plano sem trazer a aplicação para o primeiro plano.

Captura de ecrã de uma notificação de aplicação

Este artigo orienta-o através dos passos para criar e enviar uma notificação de app a partir de uma aplicação de consola .NET, e depois lidar com a ativação quando o utilizador interage com ela. Este artigo utiliza as APIs SDK de Aplicações WindowsMicrosoft.Windows.AppNotifications.

Para uma visão geral das notificações de aplicações e orientações para outros frameworks, consulte Visão geral das notificações de aplicações.

Este artigo aborda as notificações locais. Para informações sobre como entregar notificações a partir de um serviço na cloud, consulte Notificações Push.

Importante

As notificações para aplicações elevadas (de administrador) não são atualmente suportadas.

Pré-requisitos

  • Uma aplicação de consola .NET direcionada para .NET 6 ou versões posteriores
  • O pacote NuGet SDK de Aplicações Windows (Microsoft.WindowsAppSDK)

Configure o seu projeto

No ficheiro do teu projeto (.csproj), certifica-te de que o TargetFramework inclui um framework de Windows alvo:

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

Adicionar o pacote NuGet do SDK de Aplicações Windows:

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

Para aplicações não embaladas, adicione:

<WindowsPackageType>None</WindowsPackageType>

Registe-se para receber notificações de aplicações

No seu Main método, regista o handler NotificationInvokedantes de chamar Register. A aplicação de consola deve permanecer em execução para receber chamadas de ativação quando as notificações são 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 aplicações não empacotadas, o Register() configura automaticamente o registo do servidor COM, que permite Windows iniciar a sua aplicação quando uma notificação é clicada. Não precisas de configurar manualmente a ativação do COM ou um AUMID.

Enviar uma notificação de aplicação

Use o AppNotificationBuilder para construir o conteúdo das notificações e o 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);

Mantém a aplicação a funcionar

Para que o NotificationInvoked handler seja chamado, a aplicação de consola tem de continuar a correr quando o utilizador clica na notificação. Se a aplicação sair antes do utilizador interagir com a notificação, o clique seguinte irá iniciar um novo processo do início.

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 trata da 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();