Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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.
Este artigo orienta você pelas etapas para criar e enviar uma notificação de app de um aplicativo .NET e, em seguida, manipular a ativação no momento em que 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 projeto de aplicativo WPF ou WinForms que tem como alvo o .NET 6 ou posterior.
- Você deve configurar o projeto para:
Registrar-se para notificações de aplicativo
Em seu App.xaml.cs, registre-se para receber notificações no Startup manipulador de eventos. Você deve registrar seu manipulador NotificationInvokedantes de chamar o Registro.
Primeiro, atualize App.xaml para usar um Startup manipulador de eventos em vez de StartupUri:
App.xaml
<Application x:Class="WpfNotifications.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Startup="OnStartup">
</Application>
Em seguida, implemente a lógica de inicialização e tratamento de notificação.
App.xaml.cs
using System.Windows;
using Microsoft.Windows.AppNotifications;
namespace WpfNotifications;
public partial class App : Application
{
private void OnStartup(object sender, StartupEventArgs e)
{
// Register the notification handler before calling Register
AppNotificationManager.Default.NotificationInvoked += OnNotificationInvoked;
AppNotificationManager.Default.Register();
// Show the main window
var mainWindow = new MainWindow();
mainWindow.Show();
}
private void OnNotificationInvoked(
AppNotificationManager sender,
AppNotificationActivatedEventArgs args)
{
// NotificationInvoked is raised on a background thread,
// so dispatch to the UI thread for any UI updates
Current.Dispatcher.Invoke(() =>
{
// Parse args.Argument to determine what action to take.
// args.Argument contains the arguments from the notification
// or button that was clicked, as key=value pairs separated
// by '&', for example "action=reply&conversationId=9813".
});
}
protected override void OnExit(ExitEventArgs e)
{
AppNotificationManager.Default.Unregister();
base.OnExit(e);
}
}
In Program.cs, inscreva-se para receber notificações antes de chamar Application.Run(). Você deve registrar seu manipulador NotificationInvoked antes de chamar Registrar.
Program.cs
using Microsoft.Windows.AppNotifications;
namespace WinFormsNotifications;
static class Program
{
[STAThread]
static void Main()
{
// Register the notification handler before calling Register
AppNotificationManager.Default.NotificationInvoked += OnNotificationInvoked;
AppNotificationManager.Default.Register();
ApplicationConfiguration.Initialize();
Application.Run(new Form1());
// Unregister when the app exits
AppNotificationManager.Default.Unregister();
}
private static void OnNotificationInvoked(
AppNotificationManager sender,
AppNotificationActivatedEventArgs args)
{
// NotificationInvoked is raised on a background thread,
// so use Control.Invoke to marshal to the UI thread
var form = Application.OpenForms.Count > 0
? Application.OpenForms[0] as Form1
: null;
form?.Invoke(() =>
{
// Parse args.Argument to determine what action to take.
// args.Argument contains the arguments from the notification
// or button that was clicked, as key=value pairs separated
// by '&', for example "action=reply&conversationId=9813".
});
}
}
Importante
Você deve ligar Register antes de ligar AppInstance.GetCurrent().GetActivatedEventArgs(). O NotificationInvoked manipulador deve ser registrado antes de Register() ser chamado.
Note
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.
Mainwindow.xaml.cs
Form1.cs
using Microsoft.Windows.AppNotifications;
using Microsoft.Windows.AppNotifications.Builder;
private void SendNotification()
{
var notification = new AppNotificationBuilder()
.AddArgument("action", "viewConversation")
.AddArgument("conversationId", "9813")
.AddText("Andrew sent you a picture")
.AddText("Check this out, The Enchantments in Washington!")
.BuildNotification();
AppNotificationManager.Default.Show(notification);
}
Para obter informações sobre como adicionar botões, imagens, entradas e outros conteúdos avançados às notificações, consulte o conteúdo da notificação do aplicativo.
Configuração do aplicativo em pacote
Para aplicativos de .NET não empacotados, Register() manipula automaticamente o registro COM. Para aplicativos empacotados (MSIX), você precisa adicionar as seguintes extensões ao seu Package.appxmanifest:
<Package
xmlns:com="http://schemas.microsoft.com/appx/manifest/com/windows10"
xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"
IgnorableNamespaces="... com desktop">
<Applications>
<Application>
<Extensions>
<!--Specify which CLSID to activate when notification is clicked-->
<desktop:Extension Category="windows.toastNotificationActivation">
<desktop:ToastNotificationActivation
ToastActivatorCLSID="YOUR-GUID-HERE" />
</desktop:Extension>
<!--Register COM CLSID-->
<com:Extension Category="windows.comServer">
<com:ComServer>
<com:ExeServer
Executable="YourApp.exe"
Arguments="----AppNotificationActivated:"
DisplayName="YourApp">
<com:Class Id="YOUR-GUID-HERE" />
</com:ExeServer>
</com:ComServer>
</com:Extension>
</Extensions>
</Application>
</Applications>
</Package>
Importante
O Executable atributo deve conter apenas o nome do arquivo executável (por exemplo, YourApp.exe), não um caminho de subdiretório.
Conteúdo relacionado
Windows developer