Megosztás:


Helyi app értesítés küldése C++ UWP-alkalmazásokból

A app értesítés olyan üzenet, amelyet a app létrehozhat és továbbíthat a felhasználónak, amikor nincsenek jelen a app-ben.

Képernyőkép egy app értesítésről

Ez a rövid útmutató végigvezeti a Windows 10- vagy Windows 11-értesítések app létrehozásának, kézbesítésének és megjelenítésének lépésein gazdag tartalommal és interaktív műveletekkel. Ez a rövid útmutató helyi értesítéseket használ, amelyek a legegyszerűbben implementálható értesítések. Minden alkalmazástípus (WPF, UWP, WinForms, konzol) küldhet értesítéseket!

Note

Az "toast értesítés" kifejezés helyébe "app értesítés" lép. Ezek a kifejezések a Windows ugyanazon funkciójára vonatkoznak, de idővel megszüntetjük az "toast értesítés" használatát a dokumentációban.

Important

Ha nem UWP C++ alkalmazást app ír, tekintse meg a C++ WRL dokumentációját. C# appírása esetén tekintse meg a C# dokumentációját.

1. lépés: A NuGet-csomag telepítése

Értesítéseket a Windows Community Toolkit (WCT) szerkesztői szintaxisával vagy XML-lel hozhat létre app . Ha az utóbbit részesíti előnyben, ugorjon a 2. lépés részre, és tekintse meg a Builder nélküli szintaxis kódpéldáit.

A Visual Studio-megoldásban kattintson a jobb gombbal a projektre, kattintson a "NuGet-csomagok kezelése..." elemre, és keresse meg és telepítse a Microsoft.Toolkit.Uwp.NotificationsNuGet-csomag 7.0-s vagy újabb verzióját.

A Builder szintaxiskód-példái ezt a csomagot fogják használni. Ez a csomag lehetővé teszi, hogy XML használata nélkül hozzon létre app értesítéseket.

2. lépés: Névtér-deklarációk hozzáadása

using namespace Microsoft::Toolkit::Uwp::Notifications;

3. lépés: Értesítés küldése app

A Windows 10-ben és a Windows 11-ben az app értesítési tartalmakat egy adaptív nyelvvel írják le, amely nagy rugalmasságot biztosít az értesítés megjelenésével kapcsolatban. További információkért tekintse meg az értesítési tartalom dokumentációjátApp.

Kezdjük egy egyszerű szöveges értesítéssel. Hozza létre az értesítési tartalmat (az Értesítések tár használatával), és jelenítse meg az értesítést! Vegye figyelembe, hogy a névtér a Microsoft.Toolkit.Uwp.Notifications.

egyszerű szöveges értesítés

Ha nem a WCT-értesítések kódtár-szerkesztői szintaxisát használja, akkor ehelyett az XML-értesítési app sablont fogja létrehozni, szöveggel és értékekkel feltölteni, létrehozni és megjeleníteni az értesítést.

// 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();

4. lépés: Az aktiválás kezelése

Amikor a felhasználó rákattint az értesítésre (vagy az értesítés egyik gombjára, amely előtér-aktiválást használ), akkor a rendszer a(z) appApp.xaml.cppOnActivated metódusát hívja meg.

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

Inicializálnia kell a keretet, és aktiválnia kell az ablakot, ugyanúgy, mint az OnLaunched kódot. Az OnLaunched nem lesz meghívva, ha a felhasználó az értesítésre app kattint, még akkor is, ha az ön app bezárva van, és első alkalommal indul el. Gyakran javasoljuk, hogy OnLaunched és OnActivated metódusokat kombinálja a saját OnLaunchedOrActivated metódusba, mivel mindkettőben ugyanaznak az inicializálásnak kell történnie.

Aktiválás a mélységben

Az értesítések végrehajthatóvá tételének első lépése, hogy hozzáad néhány indítási arg-t az értesítéshez, hogy az Ön app tudja, mit kell elindítania, amikor a felhasználó az értesítésre kattint (ebben az esetben olyan információkat is felveszünk, amelyek később azt jelzik, hogy nyissunk meg egy beszélgetést, és tudjuk, hogy melyik konkrét beszélgetést kell megnyitni).

// 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();

Képek hozzáadása

Az értesítésekhez gazdag tartalmat adhat hozzá. Hozzáadunk egy beágyazott képet és egy profilt (app emblémát felülíró) képet.

Note

Képek használhatók a app csomagból, a app helyi tárolóból vagy a webből. A Fall Creators Update-nek megfelelően a webes rendszerképek normál kapcsolatokon akár 3 MB-ot, forgalmi díjas kapcsolatokon pedig 1 MB-ot is tartalmazhatnak. A Fall Creators Update-et még nem futtató eszközökön a webes rendszerképeknek legfeljebb 200 KB-nak kell lenniük.

Toast képekkel
// 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();

Gombok és bemenetek hozzáadása

Az értesítések interaktívsá tétele érdekében gombokat és bemeneteket adhat hozzá. A gombok elindíthatják az előteret app, a protokollt vagy a háttérfeladatot. Hozzáadunk egy válasz szövegdobozt, egy "Tetszik" gombot és egy "Nézet" gombot, amely megnyitja a képet.

Képernyőkép egy toast értesítésről bemenetekkel és gombokkal
// 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();

Az előtérgombok aktiválása ugyanúgy történik, mint a fő értesítési törzs (a App.xaml.cpp OnActivated lesz meghívva).

Háttéraktiválás kezelése

Amikor háttéraktiválást állít be az app értesítésen (vagy az értesítésen belüli gombon), a háttérfeladat kerül végrehajtásra az előtérben lévő app helyett.

A háttérfeladatokkal kapcsolatos további információkért tekintse meg a Háttérfeladatok támogatása című témakörtapp.

Ha az 14393-at vagy újabb buildet célozza meg, a folyamat közbeni háttérfeladatokat is használhatja, ami jelentősen leegyszerűsíti a dolgokat. Vegye figyelembe, hogy a folyamatban lévő háttérfeladatok nem fognak futni a Windows régebbi verzióiban. Ebben a kódmintában egy folyamatban lévő háttérfeladatot fogunk használni.

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

Ezután a App.xaml.cs bírálja felül az OnBackgroundActivated metódust. Ezután lekérheti az előtér-aktiváláshoz hasonló előre definiált argumentumokat és felhasználói bemeneteket.

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

Lejárati idő beállítása

A Windows 10-ben és a 11-ben az összes app értesítés a Műveletközpontba kerül, miután a felhasználó elutasította vagy figyelmen kívül hagyta őket, így a felhasználók megtekinthetik az értesítést az előugró ablak eltűnése után.

Ha azonban az értesítésben szereplő üzenet csak egy ideig releváns, akkor meg kell adnia az értesítés lejárati idejét app , hogy a felhasználók ne láthassák a elavult információkat az Öntől app. Ha például egy promóció csak 12 órán keresztül érvényes, állítsa a lejárati időt 12 órára. Az alábbi kódban a lejárati idő 2 nap.

Note

A helyi app értesítések alapértelmezett és maximális lejárati ideje 3 nap.

// Create toast content and show the toast!
(ref new ToastContentBuilder())
    ->AddText("Expires in 2 days...")
    ->Show(toast =>
    {
        toast->ExpirationTime = DateTime::Now->AddDays(2);
    });

Elsődleges kulcs megadása az app értesítéshez

Ha programozott módon szeretné eltávolítani vagy lecserélni az elküldött értesítést, a Címke tulajdonságot (és opcionálisan a Csoport tulajdonságot) kell használnia az értesítés elsődleges kulcsának megadásához. Ezután a jövőben ezt az elsődleges kulcsot használhatja az értesítés eltávolításához vagy cseréjéhez.

A már kézbesített app értesítések cseréjével/eltávolításával kapcsolatos további részletekért tekintse meg a rövid útmutatót: Értesítések kezelése toast a műveletközpontban (XAML).

A címke és a csoport együttes használata összetett elsődleges kulcsként működik. A csoport az általánosabb azonosító, ahol olyan csoportokat rendelhet hozzá, mint a "wallPosts", "messages", "friendRequests". Ezután a Címkének egyedileg kell azonosítania magát az értesítést a csoporton belülről. Egy általános csoport használatával az összes értesítés eltávolítható az adott csoportból a RemoveGroup APIhasználatával.

// Create toast content and show the toast!
(ref new ToastContentBuilder())
    ->AddText("New post on your wall!")
    ->Show(toast =>
    {
        toast.Tag = "18365";
        toast.Group = "wallPosts";
    });

Értesítések törlése

Az alkalmazások felelősek a saját értesítéseik eltávolításáért és törléséért. Az app indításakor az értesítéseket automatikusan NEM töröljük.

A Windows csak akkor távolít el automatikusan értesítést, ha a felhasználó kifejezetten az értesítésre kattint.

Íme egy példa az üzenetküldési app műveletekre...

  1. A felhasználó több app értesítést kap egy beszélgetés új üzeneteiről
  2. A felhasználó az egyik értesítésre koppintva nyissa meg a beszélgetést
  3. A app megnyitja a beszélgetést, majd törli az adott beszélgetés összes értesítését, a RemoveGroup használatával az adott beszélgetéshez tartozó app-által megadott csoportban.
  4. A felhasználói műveletközpont mostantól megfelelően tükrözi az értesítési állapotot, mivel a Műveletközpontban nem maradt elavult értesítés a beszélgetésről.

Az összes értesítés törléséről vagy adott értesítések eltávolításáról a rövid útmutatóban tájékozódhat: Értesítések kezelése toast a műveletközpontban (XAML).

ToastNotificationManagerCompat::History->Clear();

Resources