Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Oznámení app je zpráva, kterou může vaše app vytvořit a doručit uživateli, když nejsou momentálně uvnitř vašeho app.
Tento rychlý start vás provede postupem vytvoření, doručování a zobrazení oznámení windows 10 nebo Windows 11 app pomocí bohatého obsahu a interaktivních akcí. V tomto rychlém startu se používají místní oznámení, což je nejjednodušší oznámení k implementaci. Můžou odesílat oznámení všechny typy aplikací (WPF, UPW, WinForms, konzola).
Note
Termín "toast oznámení" se nahrazuje "app oznámením". Oba tyto termíny odkazují na stejnou funkci Windows, ale v průběhu času postupně přestaneme používat výraz "toast oznámení" v dokumentaci.
Important
Pokud píšete ne-UWP C++ app, projděte si dokumentaci pro C++ WRL. Pokud píšete C# app, projděte si dokumentaci jazyka C#.
Krok 1: Instalace balíčku NuGet
Oznámení app můžete vytvářet pomocí syntaxe tvůrce (Windows Community Toolkit, WCT) nebo pomocí XML. Pokud dáváte přednost tomu druhému, přejděte k
V rámci řešení sady Visual Studio klikněte pravým tlačítkem na projekt, klikněte na Spravovat balíčky NuGet a vyhledejte a nainstalujte balíček NuGet Microsoft.Toolkit.Uwp.Notifications verze 7.0 nebo vyšší.
Tento balíček bude používat naše syntaxe Builderu příklady kódu. Tento balíček umožňuje vytvářet app oznámení bez použití XML.
Krok 2: Přidejte deklarace jmenného prostoru
using namespace Microsoft::Toolkit::Uwp::Notifications;
Krok 3: Odeslání app oznámení
Ve Windows 10 a Windows 11 se obsah app oznámení popisuje pomocí adaptivního jazyka, který umožňuje velkou flexibilitu s tím, jak oznámení vypadá. Další informace najdete v App dokumentaci k obsahu oznámení .
Začneme jednoduchým textovým oznámením. Vytvořte obsah oznámení (pomocí knihovny oznámení) a zobrazte oznámení. Všimněte si, že obor názvů je Microsoft.Toolkit.Uwp.Notifications.
Pokud nepoužíváte syntaxi tvůrce knihoven WCT Notifications, místo toho vytvoříte šablonu oznámení XML app , naplníte ji textem a hodnotami, sestavíte oznámení a zobrazíte ji.
// Construct the content and show the toast!
(ref new ToastContentBuilder())
->AddArgument("action", "viewConversation")
->AddArgument("conversationId", 9813)
->AddText("Andrew sent you a picture")
->AddText("Check this out, The Enchantments in Washington!")
->Show();
Krok 4: Zpracování aktivace
Když uživatel klikne na vaše oznámení (nebo na tlačítko na oznámení, které má aktivaci na popředí), bude vyvolána funkce appApp.xaml.cppOnActivated.
App.xaml.cpp
void App::OnActivated(IActivatedEventArgs^ e)
{
// Handle notification activation
if (e->Kind == ActivationKind::ToastNotification)
{
ToastNotificationActivatedEventArgs^ toastActivationArgs = (ToastNotificationActivatedEventArgs^)e;
// Obtain the arguments from the notification
ToastArguments^ args = ToastArguments::Parse(toastActivationArgs->Argument);
// Obtain any user input (text boxes, menu selections) from the notification
auto userInput = toastActivationArgs->UserInput;
// TODO: Show the corresponding content
}
}
Important
Musíte inicializovat svůj rámeček a aktivovat své okno, stejně jako v kódu OnLaunched.
OnLaunched není volán, pokud uživatel klikne na vaše app oznámení, i když byl váš app zavřený a spouští se poprvé. Často doporučujeme kombinovat OnLaunched a OnActivated do vlastní OnLaunchedOrActivated metody, protože stejná inicializace musí nastat v obou případech.
Hloubková aktivace
Prvním krokem k tomu, aby bylo možné s oznámeními provádět akce, je přidat do oznámení některé parametry spuštění, aby app věděl/a, co má spustit, když uživatel klikne na oznámení. V tomto případě zahrnujeme některé informace, které nám později říkají, že bychom měli otevřít konverzaci, a víme, kterou konkrétní konverzaci otevřít.
// Construct the content and show the toast!
(ref new ToastContentBuilder())
// Arguments returned when user taps body of notification
->AddArgument("action", "viewConversation")
->AddArgument("conversationId", 9813)
->AddText("Andrew sent you a picture")
->Show();
Přidání obrázků
Do oznámení můžete přidat bohatý obsah. Přidáme vložený obrázek a profilový obrázek (app nahrazení loga).
Note
Obrázky lze použít z balíčku app, z místního úložiště app nebo z webu. Od fall Creators Update můžou být webové obrázky až 3 MB na normálních připojeních a 1 MB u připojení účtovaných podle měr. Na zařízeních, na kterých ještě není spuštěná aktualizace Fall Creators Update, nesmí být webové obrázky větší než 200 kB.
// Construct the content and show the toast!
(ref new ToastContentBuilder())
...
// Inline image
->AddInlineImage(ref new Uri("https://picsum.photos/360/202?image=883"))
// Profile (app logo override) image
->AddAppLogoOverride(ref new Uri("ms-appdata:///local/Andrew.jpg"), ToastGenericAppLogoCrop::Circle)
->Show();
Přidání tlačítek a vstupů
Můžete přidávat tlačítka a vstupní prvky, aby byla vaše oznámení interaktivní. Tlačítka můžou spustit popředí app, protokol nebo úkol na pozadí. Přidáme textové pole odpovědi, tlačítko To se mi líbí a tlačítko Zobrazit, které obrázek otevře.
// Construct the content
(ref new ToastContentBuilder())
->AddArgument("conversationId", 9813)
...
// Text box for replying
->AddInputTextBox("tbReply", "Type a response")
// Buttons
->AddButton((ref new ToastButton())
->SetContent("Reply")
->AddArgument("action", "reply")
->SetBackgroundActivation())
->AddButton((ref new ToastButton())
->SetContent("Like")
->AddArgument("action", "like")
->SetBackgroundActivation())
->AddButton((ref new ToastButton())
->SetContent("View")
->AddArgument("action", "view"))
->Show();
Aktivace tlačítek v popředí se zpracovává stejným způsobem jako hlavní text oznámení (vaše App.xaml.cpp OnActivated bude volána).
Zpracování aktivace na pozadí
Když v oznámení zadáte aktivaci app na pozadí (nebo na tlačítku uvnitř oznámení), úloha na pozadí se spustí místo aktivace popředí app.
Další informace o úlohách na pozadí najdete v článku Podporujte svou app pomocí úloh na pozadí.
Pokud cílíte na build 14393 nebo novější, můžete použít úlohy na pozadí v procesu, které výrazně zjednodušují věci. Mějte na paměti, že úlohy na pozadí v procesu nebudou spuštěny ve starších verzích Windows. V této ukázce kódu použijeme úlohu na pozadí procesu.
const string taskName = "ToastBackgroundTask";
// If background task is already registered, do nothing
if (BackgroundTaskRegistration.AllTasks.Any(i => i.Value.Name.Equals(taskName)))
return;
// Otherwise request access
BackgroundAccessStatus status = await BackgroundExecutionManager.RequestAccessAsync();
// Create the background task
BackgroundTaskBuilder builder = new BackgroundTaskBuilder()
{
Name = taskName
};
// Assign the toast action trigger
builder.SetTrigger(new ToastNotificationActionTrigger());
// And register the task
BackgroundTaskRegistration registration = builder.Register();
Pak v App.xaml.cs přepište metodu OnBackgroundActivated. Pak můžete načíst předdefinované argumenty a vstup uživatele, podobně jako při aktivaci na popředí.
App.xaml.cs
protected override async void OnBackgroundActivated(BackgroundActivatedEventArgs args)
{
var deferral = args.TaskInstance.GetDeferral();
switch (args.TaskInstance.Task.Name)
{
case "ToastBackgroundTask":
var details = args.TaskInstance.TriggerDetails as ToastNotificationActionTriggerDetail;
if (details != null)
{
string arguments = details.Argument;
var userInput = details.UserInput;
// Perform tasks
}
break;
}
deferral.Complete();
}
Nastavení času vypršení platnosti
Ve Windows 10 a 11 se všechna app oznámení po zavření nebo ignorování uživatelem přesunou do Centra akcí, aby si uživatelé mohli prohlédnout vaše oznámení, jakmile zmizí.
Pokud je však zpráva ve vašem oznámení relevantní jenom po určitou dobu, měli byste pro oznámení nastavit dobu app vypršení platnosti, aby uživatelé neviděli zastaralé informace z vašeho app. Pokud je například povýšení platné jenom 12 hodin, nastavte dobu vypršení platnosti na 12 hodin. V následujícím kódu nastavíme dobu vypršení platnosti na 2 dny.
Note
Výchozí a maximální doba vypršení platnosti místních app oznámení je 3 dny.
// Create toast content and show the toast!
(ref new ToastContentBuilder())
->AddText("Expires in 2 days...")
->Show(toast =>
{
toast->ExpirationTime = DateTime::Now->AddDays(2);
});
Zadání primárního klíče pro oznámení app
Pokud chcete oznámení, které odesíláte, odebrat nebo nahradit prostřednictvím kódu programu, musíte k zadání primárního klíče pro oznámení použít vlastnost Tag (a volitelně také vlastnost Skupina). Potom můžete tento primární klíč v budoucnu použít k odebrání nebo nahrazení oznámení.
Další podrobnosti o nahrazení nebo odebrání již doručených app oznámení najdete v tématu Rychlý start: Správa toast oznámení v Centru akcí (XAML).
Kombinace značek a skupin funguje jako složený primární klíč. Skupina je obecnější identifikátor, kde můžete přiřadit skupiny jako "wallPosts", "messages", "friendRequests" atd. Značka by pak měla jednoznačně identifikovat samotné oznámení ze skupiny. Pomocí obecné skupiny pak můžete odebrat všechna oznámení z této skupiny pomocí rozhraní RemoveGroup API.
// Create toast content and show the toast!
(ref new ToastContentBuilder())
->AddText("New post on your wall!")
->Show(toast =>
{
toast.Tag = "18365";
toast.Group = "wallPosts";
});
Vymazání oznámení
Aplikace zodpovídají za odebrání a vymazání vlastních oznámení. Po spuštění app automaticky nevymažeme vaše oznámení.
Systém Windows automaticky odebere oznámení pouze v případě, že uživatel explicitně klikne na oznámení.
Tady je příklad toho, co by mělo zasílání zpráv app dělat...
- Uživatel obdrží více app oznámení o nových zprávách v konverzaci.
- Uživatel klepne na jedno z těchto oznámení a otevře konverzaci.
- Prvek app otevře konverzaci a pak vymaže všechna oznámení pro tuto konverzaci (pomocí RemoveGroup ve app-skupině zadané pro tuto konverzaci).
- Centrum akcí nyní správně odráží stav oznámení, protože v něm nezůstala žádná zastaralá oznámení týkající se této konverzace.
Další informace o vymazání všech oznámení nebo odebrání konkrétních oznámení najdete v tématu Rychlý start: Správa toast oznámení v Centru akcí (XAML).
ToastNotificationManagerCompat::History->Clear();
Resources
Windows developer