App-meldingen gebruiken met een .NET-app

Een app-melding is een pop-up van de gebruikersinterface die buiten het venster van uw app wordt weergegeven, waarbij tijdige informatie of acties aan de gebruiker worden geleverd. Meldingen kunnen puur informatief zijn, uw app starten wanneer erop wordt geklikt of een achtergrondactie activeren zonder uw app op de voorgrond te plaatsen.

Schermopname van een app-melding

In dit artikel wordt u begeleid bij de stappen voor het maken en verzenden van een app-melding van een .NET-app en het verwerken van de activering wanneer de gebruiker ermee communiceert. In dit artikel worden de API's Windows App SDKMicrosoft.Windows.AppNotifications gebruikt.

Zie het overzicht van app-meldingen en -richtlijnen voor andere frameworks voor een overzicht van app-meldingen.

In dit artikel worden lokale meldingen behandeld. Zie Pushmeldingen voor informatie over het leveren van meldingen van een cloudservice.

Important

Meldingen voor apps met verhoogde beheerrechten worden momenteel niet ondersteund.

Prerequisites

Registreren voor app-meldingen

Registreer u voor meldingen in de App.xaml.cs-gebeurtenishandler binnen uw Startup. U moet uw NotificationInvoked-handler registreren voordatu Register aanroept.

Werk App.xaml eerst bij om een gebeurtenishandler voor Startup te gebruiken in plaats van 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>

Implementeer vervolgens de logica voor het afhandelen van opstart- en meldingen:

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);
    }
}

Registreer Program.csu in voor meldingen voordat u belt Application.Run(). U moet uw NotificationInvoked-handler registreren voordat u Register aanroept.

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".
        });
    }
}

Important

U moet bellen Register voordat u belt AppInstance.GetCurrent().GetActivatedEventArgs(). De NotificationInvoked handler moet worden geregistreerd voordat Register() wordt aangeroepen.

Note

Voor uitgepakte apps stelt Register() automatisch de COM-serverregistratie in waarmee Windows uw app kan starten wanneer op een melding wordt geklikt. U hoeft com-activering of een AUMID niet handmatig te configureren.

Een app-melding verzenden

Gebruik AppNotificationBuilder om inhoud van meldingen samen te stellen en AppNotificationManager.Show om een melding te verzenden.

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);
}

Zie App-meldingsinhoud voor informatie over het toevoegen van knoppen, afbeeldingen, invoer en andere uitgebreide inhoud aan uw meldingen.

Installatie van verpakte app

Voor uitgepakte .NET-apps verwerkt Register() com-registratie automatisch. Voor verpakte apps (MSIX) moet u de volgende extensies toevoegen aan uw 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>

Important

Het Executable kenmerk mag alleen de naam van het uitvoerbare bestand bevatten (bijvoorbeeld YourApp.exe), niet een submappad.