Поделиться через


Планирование уведомления app

app Запланированные уведомления позволяют запланировать появление уведомления в дальнейшем независимо от того, работает ли ваше приложение app в это время. Это полезно для таких сценариев, как отображение напоминаний или других последующих задач для пользователя, где время и содержимое уведомления известны заранее.

Обратите внимание, что запланированные app уведомления имеют окно доставки в течение 5 минут. Если компьютер отключен во время запланированной доставки и остается отключенным дольше 5 минут, уведомление будет удалено, так как оно больше не относится к пользователю. Если вам нужна гарантированная доставка уведомлений независимо от времени отключения компьютера, рекомендуется использовать фоновую задачу с триггером времени, как показано в этом примере кода.

Note

Термин "toast уведомление" заменяется на "app уведомление". Эти термины относятся к одной и той же функции Windows, но со временем мы будем поэтапно прекращать использование "toast уведомление" в документации.

Important

Классические приложения (как упакованные, так и распакованные) имеют немного разные шаги для отправки уведомлений и обработки активации. Следуйте нижеприведенным инструкциям, однако замените ToastNotificationManager на класс DesktopNotificationManagerCompat из документации приложений для настольных компьютеров .

Важные API: Класс ScheduledToastNotification

Prerequisites

Чтобы полностью понять эту тему, следующее будет полезно...

Шаг 1. Установка пакета NuGet

Установите пакет NuGet Microsoft.Toolkit.Uwp.Notifications. В нашем примере кода будет использоваться этот пакет. В конце статьи мы предоставим фрагменты "обычного" кода, которые не используют пакеты NuGet. Этот пакет позволяет создавать app уведомления без использования XML.

Шаг 2: Добавить объявления пространства имен

using Microsoft.Toolkit.Uwp.Notifications; // Notifications library

Шаг 3. Планирование уведомления

Мы будем использовать простое текстовое уведомление, напоминающее студенту о домашней работе, которую они должны сегодня. Создайте уведомление и запланируйте его!

// Construct the content and schedule the toast!
new ToastContentBuilder()
    .AddArgument("action", "viewItemsDueToday")
    .AddText("ASTR 170B1")
    .AddText("You have 3 items due today!");
    .Schedule(DateTime.Now.AddSeconds(5));

Укажите первичный ключ для уведомления

Если вы хотите программно отменить, удалить или заменить запланированное уведомление, необходимо использовать свойство Tag (и необязательно свойство Group), чтобы предоставить первичный ключ для уведомления. Затем этот первичный ключ можно использовать в будущем для отмены, удаления или замены уведомления.

Дополнительные сведения о замене и удалении уже доставленных app уведомлений см. в кратком руководстве по управлению toast уведомлениями в центре уведомлений (XAML).

Тег и группа объединяются в качестве составного первичного ключа. Группа — это более универсальный идентификатор, где можно назначать такие группы, как wallPosts, "messages", "friendRequests" и т. д. А затем тег должен однозначно идентифицировать уведомление из группы. С помощью универсальной группы можно удалить все уведомления из этой группы с помощью API RemoveGroup.

// Construct the content and schedule the toast!
new ToastContentBuilder()
    .AddArgument("action", "viewItemsDueToday")
    .AddText("ASTR 170B1")
    .AddText("You have 3 items due today!");
    .Schedule(DateTime.Now.AddSeconds(5), toast =>
    {
        toast.Tag = "18365";
        toast.Group = "ASTR 170B1";
    });

Отмена запланированных уведомлений

Чтобы отменить запланированное уведомление, сначала необходимо получить список всех запланированных уведомлений.

Затем найдите запланированное app уведомление, соответствующее тегу (и необязательно группе), указанному ранее, и вызовите RemoveFromSchedule().

// Create the toast notifier
ToastNotifierCompat notifier = ToastNotificationManagerCompat.CreateToastNotifier();

// Get the list of scheduled toasts that haven't appeared yet
IReadOnlyList<ScheduledToastNotification> scheduledToasts = notifier.GetScheduledToastNotifications();

// Find our scheduled toast we want to cancel
var toRemove = scheduledToasts.FirstOrDefault(i => i.Tag == "18365" && i.Group == "ASTR 170B1");
if (toRemove != null)
{
    // And remove it from the schedule
    notifier.RemoveFromSchedule(toRemove);
}

Important

Непакованный (отсутствует удостоверение пакета во время выполнения) Win32 app должен использовать класс ToastNotificationManagerCompat, как показано выше. Если вы используете ToastNotificationManager, вы получите исключение 'элемент не найден'. Все типы приложений могут использовать класс Compat , и он будет работать правильно.

Activation handling

Дополнительные сведения об обработке активации см. в документации по отправке локальных app уведомлений . Активация запланированного app уведомления обрабатывается так же, как активация локального app уведомления.

Добавление действий, входных данных и многое другое

Дополнительные сведения о расширенных разделах, таких как действия и входные данные, см. в документации по отправке локальных app уведомлений . Действия и входные данные работают одинаково в локальных app уведомлениях, как и в запланированных app уведомлениях.

Resources