Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Een app-melding is een bericht dat uw app kan samenstellen en leveren aan uw gebruiker terwijl deze zich momenteel niet in uw app bevinden.
In deze quickstart wordt u begeleid bij de stappen voor het maken, leveren en weergeven van een windows 10- of Windows 11-app-melding met uitgebreide inhoud en interactieve acties. In deze quickstart worden lokale meldingen gebruikt. Dit is de eenvoudigste melding die u kunt implementeren. Alle typen apps (WPF, UWP, WinForms, console) kunnen meldingen verzenden!
Note
De term 'toastmelding' wordt vervangen door 'app-melding'. Deze termen verwijzen beide naar dezelfde functie van Windows, maar geleidelijk zal het gebruik van "toast notification" in de documentatie worden uitgefaseerd.
Stap 1: NuGet-pakket installeren
Klik in uw Visual Studio-oplossing met de rechtermuisknop op uw project, klik op NuGet-pakketten beheren... en zoek en installeer het Microsoft.Toolkit.Uwp.NotificationsNuGet-pakket versie 7.0 of hoger.
Important
.NET Framework-bureaublad-apps die nog steeds gebruikmaken van packages.config moeten worden gemigreerd naar PackageReference, anders wordt er niet naar de Windows SDK's verwezen. Klik met de rechtermuisknop op "Verwijzingen" in uw project en klik op "Migrate packages.config to PackageReference".
.NET Core 3.0 WPF-apps moeten worden bijgewerkt naar .NET Core 3.1, anders ontbreken de API's.
.NET-apps moeten een van de Windows TFM's gebruiken, anders ontbreken de API's voor het verzenden en beheren van app-meldingen.Show() Stel uw TFM in op net6.0-windows10.0.17763.0 of hoger.
Ons codevoorbeeld gebruikt dit pakket. Met dit pakket kunt u app-meldingen maken zonder XML te gebruiken en kunt u bureaublad-apps ook app-meldingen verzenden.
Stap 2: Een app-melding verzenden
In Windows 10 en Windows 11 wordt de inhoud van uw app-melding beschreven met behulp van een adaptieve taal die u een grote flexibiliteit biedt met de manier waarop uw melding eruitziet. Zie de documentatie voor app-meldingsinhoud voor meer informatie.
We beginnen met een eenvoudige melding op basis van tekst. Maak de meldingsinhoud (met behulp van de meldingenbibliotheek) en geef de melding weer. Houd er rekening mee dat de naamruimte is Microsoft.Toolkit.Uwp.Notifications.
// Requires Microsoft.Toolkit.Uwp.Notifications NuGet package version 7.0 or greater
new ToastContentBuilder()
.AddArgument("action", "viewConversation")
.AddArgument("conversationId", 9813)
.AddText("Andrew sent you a picture")
.AddText("Check this out, The Enchantments in Washington!")
.Show(); // Not seeing the Show() method? Make sure you have version 7.0, and if you're using .NET 6 (or later), then your TFM must be net6.0-windows10.0.17763.0 or greater
Voer deze code uit en u ziet dat de melding wordt weergegeven.
Stap 3: Activering afhandelen
Nadat u een melding hebt weergegeven, moet u waarschijnlijk afhandelen wat de gebruiker doet wanneer hij op de melding klikt (of dat betekent dat specifieke inhoud wordt getoond, uw app wordt geopend, of er een actie wordt uitgevoerd wanneer de gebruiker op de melding klikt).
De stappen voor het afhandelen van activering verschillen voor UWP en voor verpakte en uitgepakte desktop-apps.
Voeg eerst in uw Package.appxmanifesthet volgende toe:
- Declaratie voor xmlns:com
- Declaratie voor xmlns:desktop
- In het kenmerk IgnorableNamespaces , com en desktop
- desktop:Extension voor windows.toastNotificationActivation om de CLSID van uw toast-activator te declareren (met behulp van een nieuwe GUID van uw keuze).
- Alleen MSIX: com:Extension voor de COM-activator met behulp van de GUID uit stap 4. Zorg ervoor dat u de
Arguments="-ToastActivated"opneemt, zodat u weet dat uw lancering afkomstig is van een melding
Package.appxmanifest
<!--Add these namespaces-->
<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 toast clicked-->
<desktop:Extension Category="windows.toastNotificationActivation">
<desktop:ToastNotificationActivation ToastActivatorCLSID="replaced-with-your-guid-C173E6ADF0C3" />
</desktop:Extension>
<!--Register COM CLSID LocalServer32 registry key-->
<com:Extension Category="windows.comServer">
<com:ComServer>
<com:ExeServer Executable="YourProject\YourProject.exe" Arguments="-ToastActivated" DisplayName="Toast activator">
<com:Class Id="replaced-with-your-guid-C173E6ADF0C3" DisplayName="Toast activator"/>
</com:ExeServer>
</com:ComServer>
</com:Extension>
</Extensions>
</Application>
</Applications>
</Package>
Vervolgens, in de opstartcode van uw app (App.xaml.cs OnStartup voor WPF), abonneer u op de OnActivated-gebeurtenis.
// Listen to notification activation
ToastNotificationManagerCompat.OnActivated += toastArgs =>
{
// Obtain the arguments from the notification
ToastArguments args = ToastArguments.Parse(toastArgs.Argument);
// Obtain any user input (text boxes, menu selections) from the notification
ValueSet userInput = toastArgs.UserInput;
// Need to dispatch to UI thread if performing UI operations
Application.Current.Dispatcher.Invoke(delegate
{
// TODO: Show the corresponding content
MessageBox.Show("Toast activated. Args: " + toastArgs.Argument);
});
};
Wanneer de gebruiker op een van uw meldingen klikt (of een knop in de melding), gebeurt het volgende...
Als uw app momenteel wordt uitgevoerd...
- De ToastNotificationManagerCompat.OnActivated gebeurtenis wordt aangeroepen in een achtergrondthread.
Als uw app momenteel is gesloten...
- De EXE van uw app wordt gestart en
ToastNotificationManagerCompat.WasCurrentProcessToastActivated()retourneert true om aan te geven dat het proces is gestart vanwege een moderne activering en dat de event handler binnenkort zal worden aangeroepen. - Vervolgens wordt de gebeurtenis ToastNotificationManagerCompat.OnActivated aangeroepen op een achtergrondthread.
Stap 4: Deïnstallatie afhandelen
Je hoeft niets te doen. Wanneer MSIX-apps worden verwijderd, worden alle meldingen en andere gerelateerde resources automatisch opgeschoond.
Afbeeldingen toevoegen
U kunt uitgebreide inhoud toevoegen aan meldingen. We voegen een inlineafbeelding en een profielafbeelding (app-logo vervanging) toe.
Note
Afbeeldingen kunnen worden gebruikt vanuit het pakket van de app, de lokale opslag van de app of via het web. Vanaf de Fall Creators Update kunnen webafbeeldingen maximaal 3 MB zijn op normale verbindingen en 1 MB op verbindingen met datalimiet. Op apparaten waarop de Fall Creators Update nog niet wordt uitgevoerd, mogen webafbeeldingen niet groter zijn dan 200 kB.
Important
Http-afbeeldingen worden alleen ondersteund in verpakte apps die in hun manifest de internetmogelijkheid hebben. Uitgepakte apps bieden geen ondersteuning voor http-afbeeldingen; u moet de afbeelding naar uw lokale app-gegevens downloaden en er lokaal naar verwijzen.
// Construct the content and show the toast!
new ToastContentBuilder()
...
// Inline image
.AddInlineImage(new Uri("https://picsum.photos/360/202?image=883"))
// Profile (app logo override) image
.AddAppLogoOverride(new Uri("ms-appdata:///local/Andrew.jpg"), ToastGenericAppLogoCrop.Circle)
.Show();
Knoppen en invoer toevoegen
U kunt knoppen en invoer toevoegen om uw meldingen interactief te maken. Knoppen kunnen uw voorgrond-app, een protocol of uw achtergrondtaak starten. We voegen een antwoordtekstvak, een knop Vind ik leuk en een knop Weergave toe waarmee de afbeelding wordt geopend.
int conversationId = 384928;
// Construct the content
new ToastContentBuilder()
.AddArgument("conversationId", conversationId)
...
// Text box for replying
.AddInputTextBox("tbReply", placeHolderContent: "Type a response")
// Buttons
.AddButton(new ToastButton()
.SetContent("Reply")
.AddArgument("action", "reply")
.SetBackgroundActivation())
.AddButton(new ToastButton()
.SetContent("Like")
.AddArgument("action", "like")
.SetBackgroundActivation())
.AddButton(new ToastButton()
.SetContent("View")
.AddArgument("action", "viewImage")
.AddArgument("imageUrl", image.ToString()))
.Show();
De activering van voorgrondknoppen wordt op dezelfde manier afgehandeld als de hoofdtekst van de melding (uw App.xaml.cs OnActivated wordt aangeroepen).
Houd er rekening mee dat argumenten die zijn toegevoegd aan de app-melding op het hoogste niveau (zoals gespreks-id) ook worden geretourneerd wanneer op de knoppen wordt geklikt, zolang knoppen de Api AddArgument gebruiken zoals hierboven wordt weergegeven (als u argumenten op een knop hebt aangepast, worden de argumenten op het hoogste niveau niet opgenomen).
Achtergrondactivering afhandelen
Voor bureaubladtoepassingen worden achtergrondactiveringen op dezelfde wijze behandeld als voorgrondactivering (uw OnActivated gebeurtenis-handler wordt geactiveerd). U kunt ervoor kiezen om geen gebruikersinterface weer te geven en uw app te sluiten na het afhandelen van de activering.
Een verlooptijd instellen
In Windows 10 gaan alle app-meldingen naar het Actiecentrum nadat ze zijn genegeerd of genegeerd door de gebruiker, zodat gebruikers uw melding kunnen bekijken nadat de pop-up is verdwenen.
Als het bericht in uw melding echter alleen relevant is voor een bepaalde periode, moet u een verlooptijd instellen voor de app-melding, zodat de gebruikers geen verouderde informatie van uw app zien. Als een promotie bijvoorbeeld slechts 12 uur geldig is, stelt u de verlooptijd in op 12 uur. In de onderstaande code stellen we de verlooptijd in op 2 dagen.
Note
De standaard- en maximale verlooptijd voor meldingen van lokale apps is 3 dagen.
// Create toast content and show the toast!
new ToastContentBuilder()
.AddText("Expires in 2 days...")
.Show(toast =>
{
toast.ExpirationTime = DateTime.Now.AddDays(2);
});
Geef een primaire sleutel op voor uw melding
Als u de melding die u verzendt via een programma wilt verwijderen of vervangen, moet u de eigenschap Tag (en eventueel de eigenschap Groep) gebruiken om een primaire sleutel voor uw melding op te geven. Vervolgens kunt u deze primaire sleutel in de toekomst gebruiken om de melding te verwijderen of te vervangen.
Zie Quickstart: Pop-upmeldingen beheren in het actiecentrum (XAML) voor meer details over het vervangen of verwijderen van al bezorgde app-meldingen.
Tag en groep fungeren gecombineerd als een samengestelde primaire sleutel. Groep is de meer algemene id, waar u groepen kunt toewijzen zoals 'wallPosts', 'messages', 'friendRequests', enzovoort. Vervolgens moet Tag de melding zelf uniek identificeren vanuit de groep. Met behulp van een algemene groep kunt u vervolgens alle meldingen uit die groep verwijderen met behulp van de RemoveGroup-API.
// Create toast content and show the toast!
new ToastContentBuilder()
.AddText("New post on your wall!")
.Show(toast =>
{
toast.Tag = "18365";
toast.Group = "wallPosts";
});
Je meldingen verwijderen
Apps zijn verantwoordelijk voor het verwijderen en wissen van hun eigen meldingen. Wanneer uw app wordt gestart, worden uw meldingen niet automatisch gewist.
In Windows wordt alleen automatisch een melding verwijderd als de gebruiker expliciet op de melding klikt.
Hier volgt een voorbeeld van wat een berichten-app moet doen...
- Gebruiker ontvangt meerdere app-meldingen over nieuwe berichten in een gesprek.
- Gebruiker tikt op een van deze meldingen om het gesprek te openen.
- De app opent het gesprek en wist vervolgens alle meldingen voor dat gesprek (door RemoveGroup te gebruiken in de groep die door de app wordt geleverd voor dat gesprek).
- Het actiecentrum van de gebruiker weerspiegelt nu de status van de melding, omdat er geen verlopen meldingen voor dat gesprek in Het Actiecentrum staan.
Zie Quickstart: Toastmeldingen beheren in actiecentrum (XAML)om te leren hoe je alle meldingen kunt wissen of specifieke meldingen kunt verwijderen.
ToastNotificationManagerCompat.History.Clear();
Resources
- voorbeeld van volledige code op GitHub
- documentatie voor app-meldingsinhoud
- ToastNotification-klasse
- Klasse ToastNotificationActivatedEventArgs
Windows developer