トースト通知をスケジュールする

スケジュールされたトースト通知を使用すると、アプリが実行されているかどうかに関係なく、後で通知を表示するスケジュールを設定できます。 これは、ユーザーのリマインダーや他のフォローアップ タスクの表示など、通知の時刻と内容が事前にわかっているシナリオで役立ちます。

スケジュールされたトースト通知の配信時間は 5 分間です。 スケジュールされた配信時間中にコンピューターの電源がオフになり、5 分以上オフのままになっていた場合、通知はユーザーと関連がなくなったので "ドロップ" されます。 コンピューターがオフになっている期間に関係なく、通知の配信を保証する必要がある場合は、次のコード サンプルに示すとおり、時刻トリガーでバックグラウンド タスクを使用することをお勧めします。

重要

デスクトップ アプリケーション (MSIX/スパース パッケージと従来のデスクトップの両方) では、通知の送信とアクティブ化の処理の手順が少々異なります。 以下の手順に従ってください。ただし、ToastNotificationManagerToastNotificationManagerのドキュメントにある DesktopNotificationManagerCompat クラスに置き換えます。

重要な API: ScheduledToastNotification クラス

前提条件

このトピックを十分に理解するには、次のものが役立ちます。

手順 1: NuGet パッケージのインストール

Microsoft.Toolkit.Uwp.Notifications NuGet パッケージをインストールします。 コード サンプルでこのパッケージを使います。 記事の最後に、NuGet パッケージを使わない "プレーンな" コード スニペットが用意されています。 このパッケージを使用すると、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 プロパティ) を使って通知の主キーを提供する必要があります。 そうすると、今後この主キーを使って、通知の取り消し、削除、差し替えができるようになります。

既に配信されたトースト通知の差し替えと削除の方法について詳しくは、「クイック スタート: アクション センターでのトースト通知の管理 (XAML)」をご覧ください。

Tag と Group を組み合わせると、復号主キーとして機能します。 Group はより汎用的な ID で、"wallPosts"、"messages"、"friendRequests" などのグループを割り当てることができます。Tag はグループ内から通知自体を一意に識別する必要があります。 汎用グループを使うことで、RemoveGroup API を使ってそのグループからすべての通知を削除できます。

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

スケジュールされた通知を取り消す

スケジュールされた通知を取り消すには、まず、スケジュールされた通知の一覧を取得する必要があります。

次に、先ほど指定した Tag (および必要に応じて Group) に一致するスケジュールされたトーストを見つけ、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);
}

重要

Win32 の非 MSIX/スパース アプリでは、上記のように ToastNotificationManagerCompat クラスを使用する必要があります。 ToastNotificationManager 自体を使用する場合は、"要素が見つかりませんでした" という例外を受け取ります。 すべての種類のアプリで Compat クラスを使用でき、これは正常に動作します。

アクティブ化の処理

アクティブ化の処理の詳細については、ローカル トーストの送信に関するドキュメントを参照してください。 スケジュールされたトースト通知のアクティブ化は、ローカル トースト通知のアクティブ化と同じように処理されます。

アクション、入力、その他の追加

アクションや入力など、高度なトピックの詳細については、ローカル トーストの送信に関するドキュメントを参照してください。 アクションと入力は、ローカル トーストの場合も、スケジュールされたトーストと同じように動作します。

リソース