他の種類のパッケージ化されていないアプリからローカル トースト通知を送信する
このトピックは、C# または C++ 以外のパッケージ化されていないアプリを開発する場合に適しています。
つまり、パッケージ化されたアプリを開発 (パッケージ化された WinUI 3 デスクトップ アプリの新しいプロジェクトを作成するを参照してください)、外部の場所でパッケージ 化されたアプリを開発していない場合 (外部の場所でパッケージ化Grant パッケージ ID を参照)、アプリは C# または C++ ではありません。
トースト通知は、ユーザーが現在アプリを使用していないときに、アプリが構築してユーザーに配信できるメッセージです。 このクイック スタートでは、Windows トースト通知を作成、配信、表示する手順について説明します。 これらのクイック スタートでは、実装する最もシンプルな通知であるローカル通知を使用します。
重要
C# アプリを作成する場合は、 C# のドキュメントを参照してください。 C++ アプリを作成する場合は、 C++ UWP または C++ WRL のドキュメントを参照してください。
手順 1: レジストリにアプリを登録する
まず、アプリを識別する一意の AUMID、アプリの表示名、アイコン、COM アクティベーターの GUID などのアプリの情報をレジストリに登録する必要があります。
<registryKey keyName="HKEY_LOCAL_MACHINE\Software\Classes\AppUserModelId\<YOUR_AUMID>">
<registryValue
name="DisplayName"
value="My App"
valueType="REG_EXPAND_SZ" />
<registryValue
name="IconUri"
value="C:\icon.png"
valueType="REG_EXPAND_SZ" />
<registryValue
name="IconBackgroundColor"
value="AARRGGBB"
valueType="REG_SZ" />
<registryValue
name="CustomActivator"
value="{YOUR COM ACTIVATOR GUID HERE}"
valueType="REG_SZ" />
</registryKey>
手順 2: COM アクティベーターを設定する
通知は、アプリが実行されていない場合でも、任意の時点でクリックできます。 したがって、通知のアクティブ化は COM アクティベーターを介して処理されます。 COM クラスでは INotificationActivationCallback
インターフェイスを実装する必要があります。 COM クラスの GUID は、レジストリの CustomActivator 値で指定した GUID と一致する必要があります。
struct callback : winrt::implements<callback, INotificationActivationCallback>
{
HRESULT __stdcall Activate(
LPCWSTR app,
LPCWSTR args,
[[maybe_unused]] NOTIFICATION_USER_INPUT_DATA const* data,
[[maybe_unused]] ULONG count) noexcept final
{
try
{
std::wcout << this_app_name << L" has been called back from a notification." << std::endl;
std::wcout << L"Value of the 'app' parameter is '" << app << L"'." << std::endl;
std::wcout << L"Value of the 'args' parameter is '" << args << L"'." << std::endl;
return S_OK;
}
catch (...)
{
return winrt::to_hresult();
}
}
};
手順 3: トーストを送信する
Windows 10 では、トースト通知コンテンツはアダプティブ言語を使用して記述され、通知の表示方法を柔軟に設定できます。 詳細については、 toast コンテンツのドキュメント を参照してください。
まず、シンプルなテキストベースの通知から始めます。 (通知ライブラリを使用して) 通知のコンテンツを作成し、通知を表示します。
重要
アプリから通知が表示されるように、通知を送信するときは、先ほどの AUMID を使用する必要があります。
// Construct the toast template
XmlDocument doc;
doc.LoadXml(L"<toast>\
<visual>\
<binding template=\"ToastGeneric\">\
<text></text>\
<text></text>\
</binding>\
</visual>\
</toast>");
// Populate with text and values
doc.SelectSingleNode(L"//text[1]").InnerText(L"Andrew sent you a picture");
doc.SelectSingleNode(L"//text[2]").InnerText(L"Check this out, The Enchantments in Washington!");
// Construct the notification
ToastNotification notif{ doc };
// And send it! Use the AUMID you specified earlier.
ToastNotificationManager::CreateToastNotifier(L"MyPublisher.MyApp").Show(notif);
手順 4: アクティブ化を処理する
通知がクリックされると、COM アクティベーターがアクティブ化されます。
[詳細]
AUMID の制限。
AUMID の長さは 129 文字以下である必要があります。 AUMID の長さが 129 文字を超える場合、スケジュールされたトースト通知は機能しません。スケジュールされた通知を追加すると、次の例外が発生します。"システム呼び出しに渡されるデータ領域が小さすぎます (0x8007007A)。"
Windows developer